簡體   English   中英

具有多個表的SQL外鍵

[英]SQL foreign keys with multiple tables

如果我有三個表:

music_genres
-----------
music_type_id
genres
[other unique fields]

minerals
--------
mineral_id
mineral
[other unique fields]

verbs
-----
verb_id
verbs
[other unique fields]

這些填充有:

rock
jazz
funk
punk

rock
boulder
stone
shale

rock
wobble
shake
vibrate

現在,假設我正在為每個項目顯示一個網頁,每個項目都使用單獨的模板,並將此信息存儲在下表中:

pages
-----
page_id
page_url
template_url
foreign_key_id

包含以下數據:

/page/music-genres/rock/
/music-genres-template.html
1

/page/verbs/rock/
/verb-template.html
1

/page/minerals/rock/
/mineral-template.html
1

/page/minerals/rock/images/
/mineral-images-template.html
1

模板將知道外鍵與特定的相關表相關,因此知道的礦物模板可以查詢該表的其他字段的礦物表。 但是,我沒有任何參照完整性。 如果從礦物表中刪除了岩石,由於外鍵不是唯一的,我不能使用級聯刪除從頁面中刪除行。 我可以想出很多方法來巧妙地解決這個問題:

  • 使用觸發器模擬級聯刪除
  • 將項目類型存儲在music_types,minerals和verbs表的每一行中,並使用它作為附加外鍵
  • 在pages表中存儲適當的表名
  • 用PHP等維護數據庫的完整性。

我認為必須有一種更好的方法來存儲我的數據或維護數據庫的完整性。 有什么想法嗎?

我認為您的問題出在這里

模板將知道外鍵與特定的相關表相關,

那就是知識,它不會存儲在數據庫的任何地方。

我看到了兩種解決方法:

  1. 假設您實際上是為每種類型的“事物”創建單獨的表,則對於每種類型的事物,都應有一個different列,以引用頁面表中的相應表,將所有列設置為null(除了一個)(可以通過一個約束)

  2. 有一個“主事物”表,該表具有唯一的ID,然后頁面可以引用該ID,並且該列具有用於標識類型的列和指向其余唯一數據的列,該列將存儲在不同的表中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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