【问题标题】:Is it necessary to bring the primary key of non repeating table while normalizing the database from UNF to 1NF将数据库从UNF规范化到1NF时是否需要带非重复表的主键
【发布时间】:2016-04-20 01:22:28
【问题描述】:

我的 UNF 是

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

这里manager_namesupplier_idorder_idpurchase_id 是主键。 在规范化期间,将有 1 个名为 purchase 的表。是否需要将manager_name设为外键?

如何规范化这些数据库?

这是我大学数据库项目的一部分。规范化真的很混乱。

【问题讨论】:

    标签: mysql database oracle oracle11g normalization


    【解决方案1】:

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

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

    否则,在最简单的情况下,采购子表将具有经理、供应商的 FK。和订单表。

    经理名称在任何情况下都不应是主键。很多人有同一个名字。使用 Manager ID 作为键,因为它是唯一的,而 name 不是。一般来说,我更喜欢将名字分成名字、中间名和姓氏,以便您可以轻松地对姓氏进行排序。然而,在某些文化中,这并不能很好地发挥作用。

    【讨论】:

    • 谢谢你,女士。并非所有技术人员都是男性。
    猜你喜欢
    • 2018-03-30
    • 2023-03-18
    • 2016-01-06
    • 2016-08-17
    • 1970-01-01
    • 2016-01-05
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多