P粉9482589582023-08-28 11:49:53
「原因之一是懶惰」。
這敲響了警鐘。您應該做這樣的事情的唯一原因是您知道如何「以正確的方式」做這件事,但您得出的結論是有一個切實的理由不這樣做。
話雖如此:如果您選擇以這種方式存儲的數據是您永遠不需要查詢的數據,那麼可能存在以您選擇的方式存儲它的情況。
(有些用戶會對我上一段的說法提出異議,說「你永遠不知道將來會增加什麼要求」。這些用戶要么被誤導,要么陳述宗教信仰。有時,努力工作是有利的你面前的要求。)
P粉5459565972023-08-28 09:02:45
除了違反第一範式之外,還因為儲存在單一值中的重複群組值列、逗號分隔清單還有很多其他更實際的問題:
idlist REGEXP '[[:<:]]2[[:>:]]'
或在 MySQL 8.0 中:idlist REGEXP '\\b2\\b'
李>為了解決這些問題,您必須編寫大量應用程式程式碼,重新發明 RDBMS 已經提供的更有效率的功能。
逗號分隔的清單是錯誤的,我將其作為我書中的第一章:SQL 反模式,卷 1 :避免資料庫程式設計的陷阱。
有時您需要採用非規範化,但正如 @OMG Ponies 所提到的,這些都是例外情況。任何非關係「最佳化」都會使一種類型的查詢受益,但會犧牲資料的其他用途,因此請確保您知道哪些查詢需要特別處理,以便它們值得非規範化。