SQL 中的自引用關係
在資料庫模式中,兩個表格可能會互相引用。然而,考慮這種自引用關係的後果很重要。
如提供的表格設計所示,表格 products 和 products_pictures 形成循環引用:products.DEFAULT_PICTURE_ID 引用 products_pictures.ID 和 products_pictures .PRODUCT_ID 引用 products_pictures.ID 和 products_pictures .PRODUCT_ID 引用 products.ID。
循環擔憂
表之間的循環引用可能會帶來複雜性和潛在問題:
緩解選項
避免缺點對於循環引用,請考慮以下選項:
選項1:可為Null外鍵
使外鍵列之一可為空。這樣就可以在一個表格中建立記錄,而不必先在相關表中建立記錄,從而解決了先有雞還是先有蛋的問題。但是,需要額外的約束來防止無效關係,如提供的範例所示。
選項 2:IsDefault Indicator
將 products 表中的外鍵替換為products_pictures 表中的布林列 IsDefault。此方法需要額外的表級約束,以確保每個產品只能指定一張圖像作為預設圖像。然而,MySQL 不支援此類部分索引約束。
選項 3:可延遲約束
此選項涉及將外鍵約束的執行延遲到資料插入之後。雖然某些 DBMS 支援此功能,但在 MySQL 中不可用。
選項 4:附加聯接表
引入單獨的聯接表來建立產品和產品之間的關係產品_圖片表。這消除了循環引用,並允許將外鍵聲明為非空。
MySQL 總結
在討論的選項中,MySQL 支援以下兩個:
以上是MySQL中如何有效管理SQL資料庫中的循環參考?的詳細內容。更多資訊請關注PHP中文網其他相關文章!