[英]Database design using one-to-one in a one-to-many relation
我有一個案例,其中表 X 可以與表 Y 具有一對一關系,同時在同一字段上與表 Y 具有一對多關系。 是否可能在表 X 和 Y 之間存在一對多關系,有時使用它來插入具有一對一關系的記錄? 這會以任何方式破壞數據庫或導致不必要的未來問題嗎? 這是一種不好的做法嗎?
例如:
公司(id,...其他列)
phone (id, company_id, ...other columns) -> 一對多關系
有時一家公司可能有多個電話號碼,有時一家公司可能只有一個電話號碼。 我遇到的情況不同,這只是一個與我遇到的類似的例子。
我試過的
我嘗試在表 X 和 Y 之間創建一對多關系(一個 X 對多個 Y)。 我的代碼和邏輯有效,這種關系解決了我面臨的模式問題,但恐怕同時將這種關系用作一對一是一種不符合 ACID 屬性的不良做法。
我還嘗試創建一個外部關系表(company_phone):
公司(id,...其他列)
電話(id,...其他列)
company_phone (id, company_id, phone_id) ->與公司表一對一關系,與電話表一對多關系
但是與電話表的新表關系會導致同樣的問題,它是一對多的,在某些情況下可能會有一對一的關系。
我真的是數據庫設計的新手,非常感謝對此的任何反饋。
讓我們檢查一下這個關系的基數:
company (1, n) own (1, 1) phone
一家公司可以擁有 1 到多部電話。
一部手機只屬於一家公司。
這種關系是OneToMany / ManyToOne ,因為最大基數(每對中最右邊的)是1
& n
。 您必須按照您的描述在電話表中創建外鍵約束。
這不會阻止任何公司只有一部電話,因為它的最小基數(最左邊的一部)是 1。這是一個有效的場景。
如果兩邊的最大基數都為 1,那將是一對一關系:
company (0, 1) own (1, 1) phone
一家公司可能只擁有一部手機。
一部手機只屬於一家公司。
在這種情況下,您可以在兩個表中創建外鍵約束
您使用“外部關系表company_phone
”的最后一個場景是ManyToMany關系,當最大基數在兩側都為n
時發生:
company (1, n) own (1, n) phone
一家公司擁有一部或多部電話。
一部電話歸一家或多家公司所有。
在這里,擁有一部手機的公司也是一個有效的場景。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.