我应该如何在数据库中建模零对多或一对多的关系?例如,用户记录可能有也可能没有父级。那么我的用户表应该有一个t_user.parent_id列,还是应该有一个名为t_user_hierarchy的关联表,其中包含t_user_hierarchy.parent_id和t_user_hierarchy.user_id两列?
我应该如何在数据库中建模零对多或一对多的关系?例如,用户记录可能有也可能没有父级。那么我的用户表应该有一个t_user.parent_id列,还是应该有一个名为t_user_hierarchy的关联表,其中包含t_user_hierarchy.parent_id和t_user_hierarchy.user_id两列?
1NF规定没有可空列。因此,为了实现零到一的关系,请在子表中放置一个外键(假设这是可能或可能不与父表相关联的表),指向父表。然后使用外连接查询从父表到子表检索有和没有子项的父项实例。
示例:
Customer Table (i.e., parent)
CID (Primary Key)
Customer_Name
Customer_Address
...
Order Table (i.e., child)
OID (Primary Key)
Ordered_Date
Order_Quantity
... (product ordered would be a foreign key to the Products table; not relevant to discussion)
CID (Foreign Key to Customer table)
SQL:
SELECT Customer.Customer_Name, Order.Ordered_Date, Order.Order_Quantity
FROM Customer
LEFT OUTER JOIN Order
ON Customer.CID = Order.CID (syntax generic)
Create Table T_USER (
User_ID Number(9) NOT NULL ,
Parent_ID Number(9)
)
只需将子表(用户表?)中的外键设置为可空