Sql-Server

外鍵表更新影響

  • February 25, 2022

可以說orders table外鍵很少。其中之一是addressId

Orders
-- Id
-- orderNum
-- customerId
-- addressId (foreign)

CustomerAddress
-- Id
-- customerId
-- street
-- cityId
-- areaId
-- postal
-- geo

Customer
-- Id
-- Name
-- more columns

現在當客戶更新個人資料中的地址時。即使對於連結到該記錄的過去訂單,更新的地址也會顯示。這不好。

我的想法解決方案是:-

  1. 創建一個新表(OrderAddress)。
  2. 下訂單時,從 CustomerAddress 插入 OrderAddress。
  3. 從 OrderAddress 中獲取新插入記錄的 addressId 並保存在 Order 記錄中。

這樣我可以確保訂單地址不會被修改,以防原始地址被修改。但它有點貴。

這是好習慣嗎?

我會維護兩個地址表。不是每個訂單的地址。這些將是…

  1. CustomerAddress - 永遠是他們的家庭住址。
  2. ShippingAddress - 這可能是他們希望將東西運送到的任何地方,即使它不是他們的家庭地址。

如果他們更新了他們的送貨地址,只需在送貨地址中插入一條新記錄並將其標記為活動或主要。這樣,所有之前的訂單仍然連結回送貨地址 1,所有未來的訂單都連結到送貨地址 2。

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