这种关系的最佳数据结构

时间:2010-06-11 14:28:07

标签: mysql database database-design

我对数据库'style'有疑问。

我需要一种存储用户帐户的方法。一些用户“拥有”其他用户帐户(子帐户)。但是并非所有用户帐户都拥有,只有一些。

最好使用像这样的表结构来表示它......

TABLE accounts (
 ID 
 ownerID -> ID
 name
)

...即使在没有所有者的帐户的ownerID列中会有一些NULL值。

或者在风格上更喜欢有两个表,如此。

TABLE accounts (
 ID 
 name
)

TABLE ownedAccounts (
 accountID -> accounts(ID)
 ownerID -> accounts(ID)
)

感谢您的建议。

2 个答案:

答案 0 :(得分:2)

我会把桌子分开。

自引用外键可能会导致很多更新/删除的痛苦。

使用组合表,所有者的级联删除将删除所有拥有的帐户。 (这可能是也可能不是。)对于单独的表,级联删除只会删除帐户所拥有的关系,而不会删除帐户本身。

答案 1 :(得分:0)

第二选择是最好的。

从理论的角度来看,它是'n-to-m'(或'many to many')关系的回归,其中'n'和'm'边表合并在一个独特的'账户中'table,以及'OwnedAccount'表是链接表的位置。

使用此模型将允许您在服务器级别实现数据完整性规则而不会出现任何问题。除了#mdma参数之外,它还可以使查询和报告更加容易。所有权规则的进一步“扩展”(一个帐户的多个所有者,级联所有权)也可以在此模型中实施。

相关问题