在 MySQL 中指定关系
Specifying relationships in MySQL
我正在尝试找出在 MySQL 中表示这一点的最佳方式。我有两个 table:clients
和 accounts
。任何 client
都可以 "own" 零个、一个或多个 accounts
。两个不同的 clients
可能拥有相同的 account
。所以一个 client
有很多 accounts
,反之亦然。
所以我目前的计划是 clients
table 有一个字段 accounts
,其中包含 account
id
的逗号分隔列表.这非常有效。
但是,如果有一个单独的 table(例如 client_accounts
)和两个字段 client_id
和 account_id
会更有意义吗?
这是针对永远不会有数百万行的数据库,因此效率不是一个重要因素。
是的,如果你想保持数据库的完整性,任何 n:n(多对多)或 1:n 关系的 table 应该使用额外的 table 链接了他们两个。
But would it make more sense to have a separate table (e.g. client_accounts
), with two fields, client_id
and account_id
这正是您应该执行此操作的方式。这样您就可以更好地利用索引并获得更快的连接。您还将在 data-secure 上节省一些精力,一旦您在此 table 中需要 两列组合 上的 UNIQUE 以不重复数据:
/* ... */ ADD idx_pair UNIQUE(client_id,account_id)
我正在尝试找出在 MySQL 中表示这一点的最佳方式。我有两个 table:clients
和 accounts
。任何 client
都可以 "own" 零个、一个或多个 accounts
。两个不同的 clients
可能拥有相同的 account
。所以一个 client
有很多 accounts
,反之亦然。
所以我目前的计划是 clients
table 有一个字段 accounts
,其中包含 account
id
的逗号分隔列表.这非常有效。
但是,如果有一个单独的 table(例如 client_accounts
)和两个字段 client_id
和 account_id
会更有意义吗?
这是针对永远不会有数百万行的数据库,因此效率不是一个重要因素。
是的,如果你想保持数据库的完整性,任何 n:n(多对多)或 1:n 关系的 table 应该使用额外的 table 链接了他们两个。
But would it make more sense to have a separate table (e.g.
client_accounts
), with two fields,client_id
andaccount_id
这正是您应该执行此操作的方式。这样您就可以更好地利用索引并获得更快的连接。您还将在 data-secure 上节省一些精力,一旦您在此 table 中需要 两列组合 上的 UNIQUE 以不重复数据:
/* ... */ ADD idx_pair UNIQUE(client_id,account_id)