想象一下帶有一組復選框的Web表單(可以選擇其中的任何一個或全部)。我選擇將它們保存在存儲在數據庫表的一列中的逗號分隔值列表中。現在,我知道正確的解決方案是創建第二個表并正確地規范化數據庫。實現簡單的解決方案更快,我想快速獲得該應用程序的概念驗證,而無需花費太多時間。我認為節省的時間和更簡單的代碼在我的情況下是值得的,這是一個可辯護的設計選擇,還是我應該從一開始就將它標準化?更多上下文,這是一個小型內部應用程序,實際上取代了存儲在共享文件夾中的Excel文件。我也在問,因為我正在考慮清理程序并使其更易于維護。在那里有一些我并不完全滿意的事情,其中一個是這個問題的主題。
6 回答

慕容森
TA貢獻1853條經驗 獲得超18個贊
關于SO的問題有很多問題:
如何從逗號分隔列表中獲取特定值的計數
如何從該逗號分隔列表中獲取僅具有相同2/3 / etc特定值的記錄
逗號分隔列表的另一個問題是確保值一致 - 存儲文本意味著拼寫錯誤的可能性......
這些都是非規范化數據的癥狀,并強調了為什么要始終為規范化數據建模。非規范化可以是查詢優化,在需要實際呈現時應用。

MMMHUHU
TA貢獻1834條經驗 獲得超8個贊
一般來說,如果符合項目要求,任何事物都可以防御。這并不意味著人們會同意或想要捍衛你的決定......
通常,以這種方式存儲數據是不理想的(例如,難以進行有效的查詢),如果修改表單中的項目,可能會導致維護問題。也許你可以找到一個中間地帶并使用代表一組位標志的整數代替?

蠱毒傳說
TA貢獻1895條經驗 獲得超3個贊
是的,我會說這真的很糟糕。這是一種可辯護的選擇,但這并不能使其正確或良好。
它破壞了第一個正常形式。
第二個批評是將原始輸入結果直接放入數據庫,而沒有任何驗證或綁定,這使您對SQL注入攻擊持開放態度。
你所謂的懶惰和缺乏SQL知識的是新手所構成的東西。我建議花點時間做好,把它看作是學習的機會。
或者保持原樣并學習SQL注入攻擊的痛苦教訓。
添加回答
舉報
0/150
提交
取消