Comment savez-vous quand une database SQL a besoin de plus de normalisation?

Est-ce lorsque vous essayez d'get des données et il n'y a pas de moyen facile apparent de le faire?

Quand vous trouvez quelque chose devrait être une table sur son propre?

Quelles sont les lois?

Découvrez Wikipedia . L'article parle de la normalisation de la database et des différentes forms (première, deuxième, troisième, etc.). La plupart du time, vous devriez viser au less la troisième forme normale . Il y a des moments où vous voulez relâcher un peu les règles (il peut être trop coûteux de joindre plusieurs tables set, donc vous pourriez vouloir normaliser un peu) mais pour la plupart, la troisième forme normale est bonne.

Lorsque vous remarquez que vous devez répéter les mêmes données ou lorsque vous commencez à utiliser des champs uniques en tant que arrays.

Bien que ce soit une réponse un peu sarcastique, lorsque vous découvrez que datatables ne sont pas suffisamment normalisées . Il y a beaucoup de ressources sur le web concernant les niveaux (ou, plus exactement, les "forms") de normalisation, et elles décrivent plus complètement les forms que je ne le pouvais ici. Les premières et deuxièmes forms normales devraient être exigées. Si vous n'êtes pas à la troisième (ou, en fait, quasortingème) forme normale, vous devez avoir une forte justification de pourquoi.

Consultez l'article Wikipedia sur la normalisation de la database .

Lorsque vous commencez à vous requestr si une database SQL a besoin de plus de normalisation.

Chaque fois que vous avez une database relationnelle …. <grin/>

Non, en fait il y a des lois, consultez ce lien Wikipédia.

ils sont appelés les cinq forms normales ou quelque chose comme ça. Originaire du gars qui a inventé les bases de données relationnelles dans les années 50/60, EF Codd.

"La key toute la key et rien que la key, alors aide moi Codd"

Ceci est un synopsis:

  1. La première forme normale (1NF) Table représente fidèlement une relation et n'a pas de groupes répétitifs
  2. Deuxième forme normale (2NF) Aucun atsortingbut non premier dans la table ne dépend fonctionnellement d'une partie (sous-set propre) d'une key candidate
  3. Troisième forme normale (3NF) Chaque atsortingbut non-premier dépend non-transitoire de chaque key de la table Chaque dépendance fonctionnelle non-sortingviale dans la table est une dépendance à une super-key
  4. Quasortingème forme normale (4NF) Toute dépendance multivaluée non sortingviale dans la table est une dépendance à une super-key
  5. Cinquième forme normale (5NF) Toute dépendance de jointure non sortingviale dans la table est impliquée par les super-keys de la table. Forme normale de domaine / key (DKNF) Ronald Fagin (1981) [19] Chaque contrainte sur la table est une conséquence logique des contraintes de domaine et des contraintes de key de la table.
  6. La sixième table de forme normale (6NF) ne comporte aucune dépendance de jointure non sortingviale (avec reference à l'opérateur de jointure généralisée)

D'autres personnes vous ont indiqué les règles formelles de normalisation. Voici quelques lignes direcsortingces informelles que j'utilise:

  1. Si vous avez des colonnes dans une table dont les noms ne diffèrent que par un nombre (par exemple, Phone1 et PHone2).

  2. Si vous avez des colonnes dans une table qui doivent être remplies uniquement lorsqu'une autre colonne de la table est remplie.

  3. Si la mise à jour d'un "fait" dans la database (telle qu'une adresse postale) nécessite plus d'une MISE À JOUR.

  4. Si la même question peut avoir deux réponses différentes selon le tableau dont vous obtenez vos informations.

  5. Si la réponse à une question non sortingviale peut être obtenue à partir de la database sans JOINTER au less deux tables.

  6. Si vous avez des ressortingctions basées sur la quantité dans la database autre que "seulement 1 de quelque chose est autorisé" (c'est-à-dire, "une seule adresse est autorisée", mais "seulement deux adresses sont autorisées").

3NF est généralement tout ce dont vous avez besoin et il suit trois règles:

Chaque colonne de la table doit être dépendante de:

  • la key (1NF),
  • la key entière (2NF),
  • et rien que la key (3NF) (alors aidez-moi Codd est la façon dont cette citation se termine généralement).

Vous pouvez souvent «rétrograder» à 2NF pour des raisons de performances, à condition de comprendre les implications et seulement lorsque vous rencontrez des problèmes , mais 3NF devrait être l'objective initial de tous vos projets.

Comme tout le monde l'a dit, vous savez quand vous commencez à avoir (trop) de colonnes en double dans plusieurs tables.

Cela étant dit, il est parfois utile d'avoir des colonnes redondantes sur plusieurs tables. Cela peut réduire le nombre de JOINs que vous avez à faire dans des requêtes compliquées. Faites juste attention à garder toutes les tables synchronisées, ou vous requestz juste des ennuis.

C'est un très bon article. Se normaliser est une science, pas un art. Maintenant, savoir quand DEnormaliser … c'est un art.

http://www.alvechurchdata.co.uk/hints-and-tips/softnorm.html

Voir Description des bases de la normalisation de la database

À quel niveau de normalisation êtes-vous actuellement? Si vous ne pouvez pas répondre à cela, je suppose que votre database est un désordre méchant. Je frappe toujours la 3ème normale sur la design initiale et dénormaliser ou normaliser davantage si et quand nécessaire.

Je suppose que vous parlez d'une database transactionnelle supportant une application interactive, mais pour ce que ça vaut …

Les bases de données OLAP utilisées exclusivement pour les rapports et uniquement mises à jour par les process ETL peuvent bénéficier d'une structure less normalisée. Dans ces applications, vous acceptez le coût d'un stockage et d'une duplication redondants des données, ce qui réduit les jointures et améliore la facilité d'utilisation pour les analystes de données et les analystes métier (parfois less techniques).

Les bases de données transactionnelles doivent toujours être normalisées dans la mesure du possible (au less 3NF), puis dénormalisées de façon sélective seulement si nécessaire . Et la nécessité de dénormaliser devrait idéalement être basée sur les résultats réels des tests de performance.

Lorsque vous devez searchr d'énormes quantités de données pour en extraire quelques informations de base, c'est-à-dire quelles catégories de produits sont présentes ou quelque chose comme ça.