2012-02-18 76 views
1

我正在設計一個數據庫,最初我設置了與訂單分開的地址,因此訂單表只有一個開單ID和地址ID參考,實際地址存儲在地址表中。最好是將地址信息存儲在訂單表中還是存儲在自己的表中?

但是我越覺得這個我不知道有任何真正的優勢,把地址轉換成它們自己的表。

主要原因是訂單是自包含的,意思是該地址只對該訂單有效。

地址鏈接而不是訂單記錄導致更新地址時出現一些複雜情況。假設我們有一個客戶的兩個訂單鏈接到同一地址,他希望地址在一個訂單上發生變化,而另一個訂單則不是新地址。現在,應用程序需要在地址表中創建一個新地址並更改訂單上的鏈接地址(您不能只更改地址,因爲它會更改這兩個鏈接的訂單)。

你還必須有一些代碼在您的應用程序已經在數據庫鏈接新訂單的地址(這僅適用於訂單,其中地址是相同或幾乎相同)。

我現在看到在自己的表有順序地址的唯一好處是讓賬單地址和送貨地址不被複制的每一份訂單。

在好像防止付款和發貨地址數據複製的表面是不值得做的地址存儲在自己的表工作所需的額外的代碼。

有關如何處理此問題的任何建議?處理我失蹤的單獨表格中的地址是否有一些很大的優勢?

+0

您打算在未來支持註冊客戶嗎?如果是,則使用單獨的地址表。 – 2012-02-18 17:59:24

+0

是的,沒有。有一個我們的網站,易趣,亞馬遜等註冊客戶,但在處理訂單的程序中沒有註冊客戶。即使有我不確定如何改變有關訂單的任何事情。由於對客戶首選地址的更改不一定更新他們想要訂單發貨的地點,並且它不會更改之前訂單的任何發貨地點。 – 2012-02-18 18:12:21

+0

只要確保你不會丟失任何數據,那麼你會好起來的;如下面答案中所述,確保您始終保留屬於訂單的地址,即使某個客戶的地址在此期間發生變化時也是如此。這同樣適用於諸如產品價格之類的東西。 – 2012-02-18 18:18:06

回答

2

這聽起來像你想要的(理想情況下)是命令鏈接到地址,因爲它是在訂單時。

有兩種主要的方法可以實現這一點 - 或者訂單包含其自身結構中的所有地址信息,或者將地址表作爲臨時表實施,並確保訂單具有適當的日期時間信息以找到正確的地址行查詢時。

要實現哪一個取決於你希望如何處理更新 - 這兩種模式可能有問題,取決於是否在飛行中的訂單應該/不應該被更新。

1

如果地址僅鏈接到該訂單,那麼它應該是訂單的一部分,而不是它自己的表格。

除非你的數據庫中有與實際的地址實體邏輯,它並不需要在自己的表,即使你要添加到存儲其他類型實體的地址信息的能力。

相關問題