【发布时间】:2022-07-26 23:55:52
【问题描述】:
我很困惑何时使用或不使用一对多与多对多。例如,用户角色。在这种情况下,多对多在减少数据大小方面具有优势,因为它只指向整数,可能每行节省 1-10 个字节,例如,id 为 7 的高级开发人员字符,它在 smallint 中消耗 2 个字节,而不是 16 个字节。但是,它使膨胀表。如果这种情况使用多对多。如果多对多具有优势,为什么还要存在一对多?对多对多不总是好的吗?
Users table
id
username
password
Users_Roles table
user_id
role
对比
Users table
Users_Roles table
user_id
role_id
Roles table
id
role
【问题讨论】:
-
您确定您的角色名称永远不会改变吗?
-
@shawnt00 如果可以更改。我认为这两种设计都没有问题。如果一对多。只需删除或更新用户的角色。如果多对多。只需更新或删除连接表。
-
@shawnt00 我仍然没有得到一对多的优势。除了它减少膨胀表。我想知道谁在处理大数据。一对多的设计还在使用吗?或者只是忽略并始终传递给多对多。多对多可以作为优化数据库。对于拥有亿行的服务器来说,减少 1-20Bytes/ 行是巨大的
标签: sql