2012-04-22 159 views
0

我有超过一个尺寸的产品。下一个设计好吗?有很多关系设计

  • 产品(#product_id,PRODUCT_NAME)

  • 尺寸(#size_id,#product_id,大小)

通过 '#' 我指的关键,无论是国外还是小学。

回答

1

你没有清楚地指定哪个列组合是主键,哪些是外键约束,哪些是在Size表中唯一约束的。

  • Product_id显然是一个引用Product的外键。它没有问题。

  • Size_id可能是一个自动递增标识符,并且意味着它是'Size'的'主键'。这对我来说似乎过火了,但实际上并没有错。

  • PRODUCT_ID和尺寸的无证组合需要在它的唯一约束,以确保您不会有两排像这样结束:

    Size_ID Product_ID Size 
    1234  23456  12 
    1235  23456  12 
    

,说同样的事情两次—的ID为23456的产品尺寸为12,并且说两次相同的事情是重复的,并且容易导致错误的答案(产品23456进来的尺寸有多大—如果您必须写COUNT(DISTINCT尺寸),则答案更难计算)而不仅仅是COUNT(*),而不是因为输入,而是因为DBMS必须做更多的工作,并且因为有人会忘记某个时间并产生错误的查询,并且直到对事情发生严重错误的原因进行验尸检查之后才会发现问题。

如果没有Size_ID,您可以很好地使用Product_ID和Size的组合作为主键。否则,您需要对Product_ID和Size有唯一的约束。

+0

我是否需要三张表ProductHasSize将product_id和size_id作为PK进行生产,ProductHasSize和Size? – 2012-04-22 23:13:40

+0

这取决于您是否需要将ProductHasSize表中的“大小”值约束为一组有效大小之一。如果你这样做,那么三表方法是合理的。大小表格将有列Size_ID和Description(或大约); ProductHasSize表将只有两列:Size_ID,一个外键引用表Size和Product_ID,这是一个引用Product的外键。 ProductHasSize表上的主键将是Size_ID和Product_ID的组合(或者,也许相反)。 – 2012-04-22 23:37:03