【发布时间】:2015-03-16 08:54:58
【问题描述】:
我对数据库设计比较陌生,我在某个概念上遇到了一些麻烦 -
据我所知,关系数据库应该始终将信息分开,并且永远不要有重复的信息。
我正在创建一个简单的网站,用户可以在其中购买产品。这两个表可能看起来像这样:
用户:
产品:
如何在这两个表之间建立关系,以便多个用户可以拥有相同的产品而不使用数组?我想到的唯一解决方案是创建第三个名为“UserOwnership”或类似名称的表,每个user_id 的外键对应每个product_id 的外键。但是,我认为这不是一个好主意,因为所有用户都会在一个庞大的数据库中拥有无组织的条目,如下所示。
例如,user1 同时拥有product1 和product2。但是,所有其他后续用户都存储在同一个表中,我认为如果有足够的用户,这会变得混乱且无法使用。
我的另一个解决方案是为每个用户使用与产品 ID 对应的信息列表,例如:
user1 拥有 product1 product2 和 product3。这看起来效果很好,但它违反了在一个单元格中存储多个值的规则。
我该如何解决这个问题?
【问题讨论】:
-
据我所知,由于 users 表和 product 表是多对多的关系,所以除了在两个表之间使用关系表之外没有其他解决方案。在数据库设计中,当你有这种关系时,你应该有第三个表来链接它们。我不会推荐您的第二种解决方案,因为它的设计很糟糕。例如:如果您查询用户拥有 product_id=2 的所有用户,则与第一个设计相比,第二个设计的效率会更低。
标签: database-design