数据库规范化到3NF



未规范化的原始表是这样的:[1]:https://i.stack.imgur.com/NbKV4.png

现在,在遵循每个表单的条件之后,我设法将表分成3个表单,看起来像这样[2]:https://i.stack.imgur.com/b414X.png [3]:https://i.stack.imgur.com/haz2Q.png [4]:https://i.stack.imgur.com/CpWXw.png

我的目标是使数据库变成3NF,是这样吗?如果没有,请告诉我需要修改的地方,谢谢。

(product_id, product_name, product_cat, product_subcat, cost, stock)

products_details(product_id, product_name, stock)
products_categories(product_cat, product_subcat)
products_costs(cost_id, cost)

这很好,但对我来说还不够。而且也不完整。这是第一个解决方案…

product_details(product_id*, psub_id@, product_name, cost, stock)
product_categories(pcat_id*, pcat_name)
product_subcategories(psub_id*, pcat_id@, psub_name)

…,其中*表示主键,@表示外键。另一个可能的解决方案是

product_details(product_id*, pcat_id@, product_name, cost, stock)
product_categorisation(pcat_id*, pcat_parent@, pcat_name)

只有当不是所有的类别都有子类别时(对不起,我不确定我在这里写得是否清楚。)
还要注意,我没有把成本单独放在一个表中,因为我不认为它们是如此独立的。但是,我不知道你正在建模的上下文。

最新更新