讓我們從上下文開始。我正在爲自己編寫一個小應用程序,它可以用來在MySQL數據庫中修改和創建產品。每個產品至少有一種生產方法,例如「鍛造」,「焊接」或「機加工」(我的應用中存在更多的方法)。產品的生產方法可以是這些方法的任意組合。MySQL - 一個字段或多對多關係中的多個值?
該應用程序目前有一個下拉菜單,其中包含複選框列表以選擇生產方法,生產方法由文本框顯示。當我的應用程序顯示的生產方法,我想這將字母順序(沒有被點擊的順序排序,就像如果你第一次點擊焊接,這將是第一個值):
產品表:「鍛造 - 焊接 - 加工」
產品
椅子: '焊接 - 鍛造 - 加工'
產品椅子: '鍛造 - 焊接 - 加工'
當我的應用程序檢索產品TABL e我也想將'僞造','焊接'和'加工'方法設置爲true。
我應該在MySQL產品表中使用一個字段來保存方法組合的字符串(如上所述),並讓我的應用程序在單擊複選框時處理排序並將此字符串保存到產品表,
或
我應該在我的數據庫中使用多對多關係,其中所有生產方法的表存在,並且我使用聯結表將產品(pID = 2)與僞造的(mID = 1),焊接(= 2)和加工(= 3)等
- PID MID
2 - 1
2 - 2
2 - 3,
或,
我應該使用像
pID的一個表 - 方法
2 - 鍛造
2 - 焊接
2 - 加工
什麼是性能代價(大量的產品和許多方法)最聰明的事情呢?每當應用程序加載一個不同的產品(發生很多事情)或產品表中的一個查詢並加載這些方法(分割字符串並將每個方法與for循環中的複選框進行比較),執行一堆查詢?
將多個數據點打包到單個字段中幾乎從來都不是一個好主意;重複存儲相同的字符串,並且稍後可能需要通過它們進行搜索(您最後的想法)也不太理想。最好的解決方案通常是_「方法表和pId-mId M:N表」_。如果你知道方法的數量是有限的(聽起來好像不是這樣),你也可以在每種方法的產品上使用單獨的「標誌」字段(但是我傾向於遠離該策略,即使列表預計會受到限制,因爲需求會隨着時間而改變)。 – Uueerdo