2016-01-20 209 views
2

我試圖爲以下實體設計數據庫模式:商店,產品,折扣和買家。目標是爲幾款產品提供折扣活動。然而,我在數據庫架構,我可以看到第一次迭代有如圖所示波紋管的循環依賴關係:SQL循環依賴關係

enter image description here

的問題是:是有這種依賴不好的SQL設計?另外,如何將買方的實體包括在內,以代表參考產品和所使用的折扣?謝謝。

+2

'Stores'和'Discounts'之間的關係是什麼? – eggyal

+0

根據您的設計,多種折扣可適用於同一產品。它很好嗎?如何選擇一個折扣(或計算)?可能只是一列DiscountId(可爲空)應添加到產品表中。此外,我會使產品商店多tomany但實際上設計很好(恕我直言)。 – StanislavL

+0

@eggyal商店1 - M折扣 – alexsc

回答

1

我沒有在你的模型中看到這樣的「循環依賴」。將其視爲一個定向(或定向)圖。從一個實體開始並返回它不可能是順時針也不是逆時針。

+0

那麼你會發現該圖是適合的? – alexsc

+0

@alexsc是的,我不認爲這個模型會打破你的應用程序 – mauro

1

我沒有ERD的軟件,但我會做這樣的事情: sample store erd

或者:

enter image description here

+0

這是有道理的。庫存表將包含所有曾經庫存的產品,以及產品是否仍然可用的指標以及產品在特定時間點的折扣。 –

+0

嘗試將折扣設想爲折扣廣告系列,其中一個產品可以是多個廣告系列的主題..我不認爲此圖表支持此用例。 – alexsc

+0

@alexsc我想我明白你在說什麼。我認爲這可以通過添加另一個橋接表來解決。 – Santiago

0

沒有循環引用,這是不會被定義爲不正確的:例如具有部門外部關鍵字的員工(員工工作)和部門之間的外部關鍵字(由管理人員)。

的設計缺陷,我確實看到:該模型能夠從一個店的折扣從商店B.產品

如果你想避免這種情況,你可以添加STOREID到主(或備用唯一鍵)的產品和折扣中,將該列添加到Product_Discounts並使其成爲兩個外鍵的一部分。

至於合併買方:您需要創建買方,銷售和銷售物品表。

  • 買家代表誰取得了零的一個或多個買家...
  • 銷售:代表其中一個買家買了零(不太可能)的事件,一個或更多...
  • Sales_Items代表在銷售同一產品的零個,一個或多個項目

最後,你需要一個Sales_Items_ Products_Discount表,用於存儲應用於銷售項目的產品折扣。

+0

標題外殼/複數表名稱讓寶寶耶穌哭了。 –

+1

命名風格有很多不同的偏好,我認爲這不是你的。實際上,它不是我的,但我試圖保持與問題中使用的相同的風格,因爲我認爲混合風格是最糟糕的風格。 –

+0

或者,制定一些標準並隨時間治癒結構。游泳池可能很髒,但如果你沒有開始清潔它,它總是很髒。 –