簡體   English   中英

在一對多關系中使用一對一的數據庫設計

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM