如何创建更好的表结构

时间:2010-12-28 08:49:03

标签: sql mysql database database-design

对于我的网站,我有表格

Category :: id | name
Product  :: id | name | categoryid

现在每个类别可能有不同的大小,因为我还创建了一个表

Size :: id | name | categoryid | price

现在的问题是,每个类别都有不同的成分,客户可以选择添加到他购买的成分 产品。这些成分具有不同尺寸的不同价格。 为此我还有一个像

这样的表格
Ingredient :: id | name | sizeid | categoryid | price

我不确定这个结构是否真的正常化了。有人可以帮我优化这个结构,我需要为这个结构索引哪个索引?

3 个答案:

答案 0 :(得分:1)

  

这些成分对不同尺寸的价格不同。

如果一种成分的价格仅取决于其大小而不是该类别,那么试试这个:

Ingredient :: id | name 

Ingredient_Price :: ingredientid | sizeid | price

Ingredient_Category :: ingredientid | categoryid

答案 1 :(得分:0)

结构对我来说很好看。 PK当然会通过将它们定义为PK来编制索引 您需要为所有FK添加索引:

product.categoryId, 
size.categoryId, 
ingredient.categoryId, 
ingredient.sizeId

根据表的大小以及您可能希望按字母顺序显示项目的事实,您可能还希望索引所有名称字段。

答案 2 :(得分:0)

Category :: id |命名
产品:: id |名字| categoryid
Size :: id |名称|
成分:: id |名称|
Category_Size :: id | categoryid | SizeID |价格
Category_Ingredient :: id | categoryID |成分ID |价格

所有复杂实体都被分解为最不可能的部分(单个表)。然后使用外键关系来逻辑地联系它们。