Quels sont les avantages et les inconvénients de créer des tables enum séparées dans SQL Server vs une table avec une colonne de catégorie?

Dites que j'ai un projet ~ 10 tables avec ~ 30 inputs chacune, qui énumèrent des valeurs. Quels sont les avantages / inconvénients possibles par rapport au scénario 1 et au scénario 2?

Et y a-t-il un point tournant pour ces (dés) avantages en fonction de la quantité de tables d'énumération / quantité de lignes par table?

Scénario 1:

Tableau 1:

ID Value --------- 1 - Value1 2 - Value2 3 - Value3 

Tableau 2:

 ID Value --------- 1 - Value4 2 - Value5 3 - Value6 

Scénario 2:

Tableau 1:

 ID Value Category --------------------- 1 - Value1 - 1 2 - Value2 - 1 3 - Value3 - 1 4 - Value4 - 2 5 - Value5 - 2 6 - Value6 - 2 

J'irais avec l'option un.

La raison principale est que la première option vous permet d'utiliser des contraintes de foreign keys spécifiques, ce qui signifie que chaque atsortingbut de la table principale peut être lié uniquement à sa table, alors que pour get la même chose avec la deuxième option, vous aurez utiliser également la contrainte de vérification, qui vous forcera à créer un schéma de database plus encombrant.

La deuxième raison est que les tables de database doivent refléter les entités commerciales – et la première option vous permet de le faire avec plus de précision.

La troisième raison est qu'il vous permet de sauvegarder "enums" avec le type de données le plus correct pour chaque "enum".

Passons en revue un exemple plus détaillé – supposons que votre database est pour la vente de chemises. Les chemises ont une veriaty de détails qui peuvent vérifier – comme la couleur et la taille par exemple.

Votre première option se traduirait par quelque chose comme ceci:

 Create table Shirts ( Id int, Model_Id int, Color_Id int, Size_Id int ) Create table Models ( Id int, Name varchar(50) ) Create table Colors ( Id int, Name varchar(20) ) Create table Sizes ( Id int, Name varchar(5) ) 

Le deuxième traduirait à ceci:

 Create table Shirts ( Id int, Model_Id int, Color_Id int, Size_Id int ) Create table Enums ( Id int, Name varchar(50), Categoery_Id int ) Create table Categories ( Id int, Name --(Model, Color, Size etc`) ) 

Maintenant, dites que quelqu'un change le category_id pour un logging spécifique dans la table enums – vos données ne sont plus correctes – cela ne peut pas arriver avec la première option.