2010-11-30 4 views
7

J'ai une colonne dans l'une de mes tables. C'est facultatif, donc il peut être laissé vide. Cependant, si une valeur est fournie pour cette colonne, elle doit être unique. Deux questions:Conception de base de données: facultatif, mais doit être unique si une valeur est fournie

  1. Comment puis-je mettre dans ma conception de base de données (j'utilise MySQL Workbench, par la voie)
  2. Y at-il un problème potentiel avec mon modèle?
+1

Réponse à (2). Non, c'est tout à fait normal. –

Répondre

4

Voir:

http://dev.mysql.com/doc/refman/5.1/en/create-index.html

Un index unique crée une contrainte telle que toutes les valeurs de l'indice doivent être distincts. Une erreur se produit si vous essayez d'ajouter une nouvelle ligne avec une valeur de clé qui correspond à une ligne existante. Pour tous les moteurs , un index UNIQUE permet plusieurs valeurs NULL pour les colonnes que peut contenir NULL. Si vous spécifiez une valeur de préfixe pour une colonne dans un index UNIQUE , les valeurs de colonne doivent être uniques dans le préfixe.

2

Il peut être nul (et non vide) et unique. Par défaut, la valeur peut être nulle. Il n'y a pas de problème pour moi. Il suffit d'utiliser un index UNIQUE sur la colonne.

1

Vous pouvez créer un index UNIQUE sur une table. Dans MySQL workbench, cochez la case UQ lors de la création/modification de la table.

0

Étape 1, ALTER la table et MODIFY le champ NULL sont donc autorisés.

ALTER TABLE my_table MODIFY my_field VARCHAR(100) NULL DEFAULT NULL; 

Étape 2, ajoutez un index UNIQUE sur le champ.

ALTER TABLE my_table ADD UNIQUE INDEX U_my_field (my_field); 

Il est bon d'utiliser - ma seule hésitation à mettre un index sur un champ UNIQUE annulable il qu'il est un peu contre-intuitif au premier coup d'œil.

0

1) Déplacez la colonne vers une nouvelle table, rendez-la unique et non nullable. Vous pouvez maintenant avoir une ligne dans cette nouvelle table seulement quand vous avez une valeur pour cela.

2) Oui. Les clés et les dépendances sur les clés sont la base de l'intégrité des données dans une conception de base de données relationnelle. Si un attribut est supposé unique, il doit être implémenté en tant que clé. Une "clé" nullable n'est pas une clé du tout et de toute façon n'est jamais nécessaire car elle peut toujours être déplacée vers une nouvelle table et rendue non nulle sans perte d'information.

Questions connexes