Maison > Questions et réponses > le corps du texte
P粉9482589582023-08-28 11:49:53
"Une des raisons est la paresse".
C'est un signal d'alarme. La seule raison pour laquelle vous devriez faire quelque chose comme ça, c'est parce que vous savez comment le faire « de la bonne manière », mais vous concluez qu'il y a une bonne raison de ne pas le faire.
Cela étant dit : si les données que vous choisissez de stocker de cette manière sont des données que vous n'aurez jamais besoin d'interroger, il peut alors être judicieux de les stocker de la manière que vous choisissez.
(Certains utilisateurs contesteront ma déclaration dans le paragraphe précédent, disant "on ne sait jamais quelles exigences pourraient être ajoutées à l'avenir". Ces utilisateurs sont soit mal informés, soit déclarent des croyances religieuses. Parfois, il est avantageux de travailler dur pour le exigences devant vous)
P粉5459565972023-08-28 09:02:45
En plus de violer la Première forme normale, il existe de nombreux autres problèmes plus pratiques avec les colonnes de valeurs de groupe répétées stockées dans une seule liste séparée par des virgules :
idlist REGEXP '[[:<:]]2[[:>:]]'
或在 MySQL 8.0 中:idlist REGEXP '\b2\b'
李>
Pour résoudre ces problèmes, vous devez écrire beaucoup de code d'application et réinventer les fonctionnalités plus efficaces que le SGBDR propose déjà.
Les listes séparées par des virgules sont fausses et j'en ai fait le premier chapitre de mon livre : SQL Anti-Patterns, Volume 1 : Éviter les pièges de la programmation de bases de données.
Il y a des moments où vous devez dénormaliser, mais comme @OMG Ponies l'a mentionné, ce sont des exceptions. Toute « optimisation » non relationnelle bénéficiera à un type de requête au détriment d’autres utilisations des données, alors assurez-vous de savoir quelles requêtes nécessitent un traitement spécial afin qu’elles méritent une dénormalisation.