2012-05-25 56 views
0

我們現在正在制定計劃,所以在我開始進展之前,我想確保我以最好的方式處理事情。SELECT DISTINCT或單獨的標準化表?

我們有一個產品表,我們將在其中添加一個名爲'format'的新字段,該字段將成爲產品(包,箱等)的結構。沒有爲此設置的值,用戶可以在該字段中輸入他們喜歡的任何內容,但是我們希望顯示用戶已輸入的所有格式的下拉列表。

有兩種方法我可以這麼做:產品表上的基本SELECT DISTINCT以獲取用戶已經填充的所有格式;或存儲格式並由產品鏈接的單獨表格。

本能地我想使用SELECT DISTINCT,因爲它會讓我的生活更輕鬆。但是,假設一個十億個產品的表格,這將是最好的方法?

+0

在90%的案例中使用'DISTINCT'意味着你犯了錯誤。我不認爲它是無用的,但它是錯誤查詢或模式的完美指標 – zerkms

回答

1

如果您決定將所有內容都保存在一張表中,請在該列上創建一個索引。這應該加快在用戶應用程序中創建列表的處理。

我有些不可知論哪個是最好的方法。通常,在設計用戶界面時,你想嘗試不同的東西。不得不進行數據庫更改阻礙了構建應用程序的創作過程。另一方面,通常當用戶從應用程序的下拉框中選擇事物時,這些「事物」就是「實體」的極好例子 - 這就是表格的意圖。

最後,我會說做開發應用程序時最方便的。當你接近完成它時,考慮將這些東西存儲在一個單獨的表中是否會更好。其中一個重大問題是,您是否想知道所有已使用過的所有格式,即使當前沒有用戶定義它們。

+0

偉大的答案,幾乎正是我的想法。我認爲將格式存儲在單獨的表格中將是「更正確」的方式,但好處似乎並不值得進行額外的工作。最後,我去了DISTINCT。謝謝! – ACobbs

0

既然你讓用戶輸入任何他們想要的,我會去第二個選項。

創建一個新表並在其中插入所有新的「格式」並鏈接到產品表。

確保在創建用於添加用戶輸入的格式的代碼時,檢查數據庫上是否存在相同的值,以便您不需要區分它們。

此外,要保持一致,要麼只有每個單詞的第一個字母upprcase。

2

我想我會選擇第二個選項(額外的表+外鍵,如果你想添加約束),只是因爲音量和因爲你可以有管理,將合併類似的產品形式,例如。