我該如何建模數據庫中的零關係或多關係?例如,用戶記錄可能有也可能沒有父母。那麼我的用戶表應該有t_user.parent_id還是應該有一個名爲t_user_hierarchy的關聯表,其中包含t_user_hierarchy.parent_id和t_user_hierarchy.user_id列?建模零或一對多關係
3
A
回答
2
看看這個話題。類似問題:Any example of a necessary nullable foreign key?
是否有其他關聯表或可爲空的外鍵取決於您的用例。它的主觀性取決於你的設計。
0
只是要在子表的外鍵(用戶表?)可空
0
我會去與一個可空父ID。然後,您可以使用自聯接來獲取任何特定記錄的父項或子項。
0
數據庫中的零或一對多關係通常表示爲聲明該字段,在您的實例中爲Parent_ID,然後保留一個值以表示它指向無。
由於關係數據庫(RDBMS)通常允許您有NULL值,因此可以使用NULL值標記沒有父項的特定記錄。
Create Table T_USER (
User_ID Number(9) NOT NULL ,
Parent_ID Number(9)
)
上面的例子適用於Oracle RDBMS,但這個想法在其他數據庫中也是類似的。或者,您可以專門用一個字段來標記數據庫,但通常這是一個重載,因爲大多數數據庫系統可以處理NULL的特殊情況,而無需添加額外的字段。
2
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)
這將返回所有客戶記錄和作出的任何命令關聯。它也會返回沒有訂單的客戶。
相關問題
- 1. Access中的零或一對多關係
- 2. 建模多對多關係
- 3. 零或一至零或一的關係
- 4. nHibernate,一對零或一個關係woes
- 5. 一對零或一個關係ASP.NET MVC
- 6. 建模多對多的一元關係和1:一元關係
- 7. 在燈開關中創建零關係或一對一關係的主鍵
- 8. 零或一對零或一個關係問題
- 9. 建模一對一關係
- 10. 一對一關係建模
- 11. 建模一到零或一個關係(Z基數)
- 12. ASP.Net與標識模型的一對一或零關係
- 13. 一個或零一對多關係的WebAPI
- 14. EF4.3創建一對一或零關係失敗
- 15. CakePHP - 零對多關係
- 16. 正確地創建關係,多對一或一對多
- 17. 多對多關係:獲取或創建
- 18. 創建一對多關係
- 19. 建模或關係?
- 20. 一對一或一對多關係模式
- 21. 如何建模PHP多對多關係
- 22. 多對多的關係維度建模
- 23. 在MongoDB中建模多對多關係
- 24. CakePHP零對一關係
- 25. JPA多對多的關係:零個或多個
- 26. Code First EF5:一對零或一對一關係不起作用
- 27. 一對零或一對一的關係與WebAPI OData v4
- 28. CoreData - 一對多建模關係以一對一形式出現
- 29. 如何建模一個多一對多的關係,具有具有一對多的關係相關的軌道
- 30. 多對多關係和關係模型