Mysql

定義可能具有(1..0-1)關係的兩種方法

  • June 2, 2021

今天我為自己發現了可能有,一對零或一,(1-0..1)關係可以通過兩種不同的方式實現:

A為*“主”表(.. 的左側),B“連結”*表(.. 的右側)。

  1. A有一列可以是數字或 NULL。該數字連結到B的主鍵。
  2. B有一個 UNIQUE 列,該列連結到表A中的主鍵。

從數學上講,這兩種連結表的方法是等價的(它們都是 1-0..1,即 may-have-a),但是這兩種變體的表結構不同。

我正在為我們的數據庫編寫一個輕量級的 ORM。(我知道我不應該這樣做,但我們公司的事情是這樣的。)

不好的是,我們的數據庫中可能存在關係,有時以一種方式實現,有時以另一種方式實現。

我們是否應該重組我們的數據庫以僅保留這兩種關係中的一種?要保留兩個變體中的哪一個?

作為臨時測量,我建議在我的 ORM 中創建兩個關係:

  1. 可能有-a1
  2. 可能有-a2

有什麼辦法可以避免這種詭計嗎?

您的第二個設計 (2) 確實是一種1 - 0..1關係。

第一個設計 (1) 是一個混搭,更像是一個0..1 - 0..1關係(假設這個“數字或空”列也有一個唯一約束。如果沒有,它就是0..n - 0..1.)。

您在這裡有 2 個相互衝突的設計目標。一是設計好的數據庫。另一個是與 OR 映射器配合得很好。您也許可以轉向更一致的方法來映射部分參與約束,但您將來會繼續遇到設計衝突。

一種選擇是創建一組視圖以使用您的 ORM 蠕蟲,從而將問題抽象掉。

引用自:https://dba.stackexchange.com/questions/119967