Foreign-Key

以數組格式保存引用

  • August 22, 2018

我有一個orders桌子和products桌子的設計。每個訂單可以有很多產品,所以 1 訂單 N 個產品。

預設設計是這樣的:

訂單表

order_id, product_id

產品表

product_id, product_name, value

因為每個訂單都會有很多產品,所以我會有很多行只針對一個訂單,例如

order_id = 1, product_id = 1
order_id = 1, product_id = 2
order_id = 1, product_id = 3

我想保存多行的創建,並以 CSV 方式儲存 product_ids,例如:

order_id = 1, product_ids = 1,2,3

該表如下所示:

新更新的訂單表,區別在於 product_ids 現在是一個 VARCHAR,它將保存許多用逗號分隔的 id。

order_id, product_ids

如果是這樣,我該如何建立關係?我無法將 product_id 連結到參考 product_ids,因為它不匹配。我如何建立這種關係?

我可以使用哪些其他優點和缺點或技術來實現我正在嘗試的目標?

您建議的設計違反了第一範式,該範式規定每個屬性都必須是原子的。如果您將多個項目儲存為 CSV 字元串,那麼稍後查詢它會遇到許多挑戰。你也不能有效地索引它,當然你也不能強制引用完整性。

訂單通常儲存在訂單表中,其中包含與訂單相關的屬性,例如訂單日期和客戶。Order items 是一個不同的實體,應該建模為一個 order items 表,它的 key 應該是一個由 order ID 和 item 標識符組成的複合鍵。

遵循久經考驗的設計,不要試圖重新發明輪子,絕對不要違反第一範式。有很多很好的理由。

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