gpt4 book ai didi

mysql - 交集表或通用 super 表

转载 作者:行者123 更新时间:2023-11-29 14:47:40 25 4
gpt4 key购买 nike

我目前有这样的设计。每个对象类别都有一个表。每个表包含需要与多个状态关联的行(对象)。

状态表

  • ID
  • 状态

用户

  • ID
  • 用户名
  • ...

其他一些对象类

  • id

  • ...

将每个对象类表链接到状态表的最佳方法是什么?我在 SQL Antipatterns 中描述的两种方法之间犹豫不决:

交集表

users_has_statuses

  • 用户 ID
  • status_id
  • UNIQUE(user_id, status_id)

等等。这将需要每个对象类的交集表。因此,当我添加更多对象类(表)时,我将需要添加一个交集表,这意味着

祖先表

object_ancestor

  • ID

object_ancestor_statuses

  • object_ancestor_id
  • status_id
  • UNIQUE(object_ancestor_id,status_id)

每个对象类都会有一个带有外键的列,该外键链接到 object_ancestor 表中的 id 列。

就性能和设计优雅而言,哪种方式会更好?

最佳答案

我的观点是交集表方式更好。

如果您有许多具有状态的实体表,并且使用单个表将它们链接到状态,那么随着您添加越来越多的数据,性能将逐渐下降(因为当 DBMS 查找实体的状态时,它会“浏览”所有其他类型实体的条目)。

祖先方式的另一个问题是,通过查看数据库结构,您无法判断哪些类型的实体具有状态。例如,如果您有人、狗和岩石,每个人在祖先表中都有条目,那么您就无法判断岩石没有状态。

关于mysql - 交集表或通用 super 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6554682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com