在将数据库从UNF规范化为1NF时,是否有必要使用非重复表的主键

时间:2016-01-14 16:10:51

标签: mysql database oracle oracle11g normalization

我的UNF

database(
manager_id,
manager_name,
{supplier_id,
supplier_name,
{order_id,
order_quantity}}
{purchase_id,
purchase_date}

此处manager_namesupplier_idorder_idpurchase_id是主键。 在规范化期间,将有一个名为purchase的表。是否有必要将manager_name作为外键?

如何规范化这些数据库?

这是我的数据库大学项目的一部分。规范化确实令人困惑。

1 个答案:

答案 0 :(得分:1)

首先考虑通过自然结合在一起的事物来分解事物。在这种情况下,您有经理信息,供应商信息,订单信息和购买信息。我个人想知道订单和购买之间的区别,因为我不清楚。

因此,您至少有四个表用于这些单独的信​​息(尽管取决于您可能需要的其他字段,供应商和经理可以在同一个表中使用其他字段,例如person_type来区分它们,在这种情况下您希望查找表从中获取有效的人员类型值。然后你需要看看这些东西是如何相互关联的。他们是一对一的关系还是一对多或多对多的关系?在一对一的关系中,您需要FK也有一个唯一的索引约束来保持唯一性。在多对多中,您将需要一个包含两个ID的附加联结表。

否则,在最简单的情况下,购买子表将向经理,供应商提供FK。和订购表。

管理员名称在任何情况下都不应是主键。很多人都有相同的名字。使用Manager ID作为密钥,因为它在名称不是的地方是唯一的。一般来说,我更喜欢将名称分为First,middle和last,以便您可以轻松地对姓氏进行排序。但是在某些文化中,这种方法效果不佳。