我有一个表Producers
和一个表Products
,它们的形式都是:
Id
- int,主键Name
- nvarchar
一个生产者可以携带多个产品,所以我要创建一个名为的表ProducerDetails
,它有:
ProducerId
- int,外键Producers.Id
ProductId
- int,外键Products.Id
然后我开始质疑自己,所以我想我会问专家。在我的表中添加一个额外的Id
(int, Primary key) 列会更好的数据库设计吗?ProducerDetails
或者那是不必要的?
如果这有什么不同的话,我正在使用 SQL-Server 2008 R2。
编辑- 我相信这些表之间的关系是多对多的,抱歉我没有说清楚。一个生产者可以携带多种类型的产品,同一产品可以由多个不同的生产者生产。
如果这个问题过于简单,我深表歉意,参照完整性/数据库设计不是我的强项(尽管我正在努力改进)。
不,向该表添加额外的“主键”没有任何价值。您的联接只会引用
ProducerID
andProductID
,因此它只是自重。恕我直言。尽管我同意@Shark 的观点,这里似乎甚至不需要连接表,除非您竭尽全力不以任何方式更改现有表的架构。
顺便说一句,我还认为值得完整地命名您的主要标识符(例如
Products.ProductID
,而不是Products.ID
),以便在整个架构中一致地命名该标识符。如果生产者和产品之间存在一对多的关系(换句话说,一个产品只能属于一个生产者),那么直接在Products
表中放置一个外键引用是有意义的:一对多
但是,如果这可能是多对多关系,那么最好的选择是使用联接表。多对多
如果您决定使用 Join 表,则不需要额外的键,因为组合
ProductId/ProducerId
最终是唯一的。您可以将它们用作复合键, 因此您不需要Id
.ProductProducer