0

我有不止一种尺寸的产品。下一个设计好不好?

  • 产品(#product_id,product_name)

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

我用“#”表示一个键,无论是外键还是主键。

4

1 回答 1

1

您没有明确指定哪些列组合是主键,哪些是外键约束,哪些是 Size 表中唯一约束的。

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

  • Size_id 可能是一个自动递增的标识符,并且是 Size 的“主键”。对我来说这似乎有点矫枉过正,但实际上并没有错。

  • Product_ID 和 Size 的未记录组合需要对其进行唯一约束,以确保您最终不会得到这样的两行:

    Size_ID   Product_ID    Size
     1234      23456        12
     1235      23456        12
    

说同样的事情两次——ID 为 23456 的产品的尺码为 12。同样的事情说两次是重复的,很容易导致错误的答案(产品 23456 有多少尺码——如果你必须写 COUNT(DISTINCT Size) 而不仅仅是 COUNT(*),这不是因为打字,而是因为 DBMS 必须做更多的工作,因为有时有人会忘记并产生错误的查询,它不会是直到事后检查为什么会出现严重错误时才被发现是一个问题。

使用 Product_ID 和 Size 的组合作为主键,您可以完全不使用 Size_ID。否则,您需要对 Product_ID 和 Size 进行唯一约束。

于 2012-04-22T23:06:09.147 回答