Database-Design

如何在填充子表之前自動在父表中創建條目?數據庫術語中叫什麼?

  • July 22, 2022

我想要的是在子表中插入出版物的字元串名稱以與出版物表中的出版物的 PK 相關聯。例如,假設我有一個縣表和一個國家內的州表。states 表將有一個國家列,在國家表中有一個外鍵。

期望的結果是我有一個“國家”表的“國家”表,其中:

  1. 可以在不首先明確添加其父國家/地區的情況下添加州。
  2. 為了便於使用,字元串名稱在所有表中都可見
  3. 我不會為每個表中的每個條目儲存字元串的實際副本。

因此,假設我想在一個沒有條目的國家/地區添加一個州。我想擁有它,這樣當我添加一個包含“Ruritania City”行的數據的對象時,“國家”的值為“Ruritania”,將發生以下情況:

  1. 檢查“國家”表中的“Ruritania”條目。
  2. 如果“國家”的“國家名稱”列中不存在“Ruritania”,則創建它。
  3. “國家”中新的魯里塔尼亞條目的新 PK 放在“州”表中新的“魯里塔尼亞城市”條目的外鍵列中。PK 用於將國家字元串名稱列連接到“州”中具有 Ruritania FK 的所有行。

我確信所有這些都是非常標準的數據庫內容,但我無法在文件中找到它。大多數數據庫文件都是用數據庫術語編寫的,我很難知道何時找到了我正在尋找的術語。

我的問題是:

  1. 我所描述的是否可行且合理?
  2. 我將如何用數據庫術語提出我的問題,以便我能找到答案?
  3. 如果您有有效實現此目標的具體想法,歡迎提出建議。我正在通過 SQLAlchemy 使用 Postgres,但是任何平台的答案都應該可以幫助我找到我正在尋找的東西。

編輯回應@mustaccio:

我認為不斷被術語所拋棄。當我讀到“回填”之類的選項時,我將其解釋為父表將填充從子錶鍊接的數據。我不希望它開箱即用地工作,但如果不是這樣,回填意味著什麼?

即使 DBMS 沒有實現我描述為一個功能的所有功能,我希望這將是一種足夠普遍的需求,以至於會有一種標準的方法來實現它,或者至少是該任務的名稱。

關鍵是我不希望使用者在為 Ruritania City 創建條目之前必須考慮是否存在 Ruritania 國家條目。如果使用者說 Ruritania City 位於 Ruritania 的國家,則 Ruritania in countries 的條目將在“國家”中創建,如果它不存在。

我並不特別關心這個邏輯是在哪裡實現的,只要最終結果是一個人類可以自己理解的表,即使數據庫被導出到某個地方並與控制條目創建的邏輯分開。

您描述的稱為“應用程序邏輯”;顯然,我熟悉的所有 DBMS 都沒有實現這種“開箱即用”。我說“顯然”,因為許多應用程序希望自動創建父記錄,因為這只會導致數據庫被垃圾填充,因此將其作為預設數據庫行為是不可接受的。

如果您的目標是將應用程序邏輯的實現解除安裝到數據庫(有些人可能會反對這個想法,而其他人可能會接受),您可以通過在數據庫中創建程序化對象(例如觸發器和儲存過程)來實現。在後一種情況下,您的應用程序不會直接將行插入到表中,而是呼叫數據庫儲存過程,由數據庫儲存過程來完成剩下的工作。

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