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