“好的”,我的意思是“它对整个数据库设计没有任何不良影响”。
例如,我有一个包含三个表的简单数据库:
很明显,Order 表只是两个表(Customer 和 Product)之间的映射。表Order 中的OrderID 没有用,它只是用来标识每一行。
如果我不想识别每一行,因为例如我们有规则:
用户不能两次订购相同的产品。
当然,这与现实相去甚远,但这只是一个例子。
底线问题是,在上面给出的示例中,是否可以删除表 Order 中的 OrderID 并将表 Order 中的 ProductID 和 CustomerID 设置为复合主键?在这种情况下,Order 表仅包含外键并设置为复合主键。
作为初学者,我搜索了很多数据库设计概念,发现了一些术语,如“主键”、“复合主键”、“数据库规范化”等,但不知道在实践中会发生什么,所以我决定在这里问。我只是担心它对未来的影响,因为我不知道是否存在特定情况下它会成为劣势。
拥有仅由外键组成的表没有问题。在您的特定示例中,可以删除 OrderID。关系理论指出,每个表都应该有一个候选键,因此,理想情况下,您提到的业务规则应该到位,以使仅外键的表成为“好”表。在实践中,DBMS 软件不会关心并且允许没有唯一约束的表。
只要您遵守您为系统决定的唯一性业务规则,插入通常不会有任何问题。相反,如果没有唯一性,您最终可能会得到应用程序必须处理的 SELECT 中的重复行。
如果您将来添加更多列,则不会出现问题,因为现有列都是外键。
当实体类型之间存在多对多关系时,这种情况非常常见。这是作为包含外键的交集表来实现的。
| 归档时间: |
|
| 查看次数: |
19139 次 |
| 最近记录: |