2010-09-15 6 views

Répondre

2
ALTER TABLE dbo.DrivingLicence ADD CONSTRAINT 
    NameOfConstraint CHECK (CanDriveBus=0 OR CanDriveCar=1) 
1

Martin vous a donné une réponse possible, mais on ne sait pas à partir de votre poste que votre modèle de données est: faire une licence de voiture et un permis de bus ont le même numéro de licence ou non? Autrement dit, si j'ai un permis de conduire et que j'apprends à conduire un autobus, est-ce que j'obtiens une deuxième licence ou juste un timbre sur mon permis existant?

S'il s'agit de licences distinctes, alors je suppose qu'elles seront des lignes séparées dans votre table car la clé primaire de la table est - j'espère! - Numéro de licence. Et dans ce cas, les contraintes CHECK ne fonctionneront pas car elles ne s'appliquent qu'aux valeurs d'une ligne; vous devez utiliser des déclencheurs pour vérifier les licences dont dispose déjà un pilote lorsque vous en ajoutez un nouveau.

Ainsi, vos options sont:

  1. pilotes ne peut jamais avoir une licence avec un numéro unique: utilisez une contrainte CHECK
  2. Les conducteurs peuvent avoir plusieurs licences de différents types avec des numéros différents: utilisez un déclencheur
  3. il est plus compliqué que cela: utiliser un code proc ou de l'application stockée pour insérer de nouvelles licences

Votre message suggère 1, mais il est un peu clair. Et même si tel est le cas, vous pouvez envisager une deuxième table appelée DrivingLicenceQualifications ou autre: si une licence peut avoir de nombreuses qualifications, et si vous prévoyez d'ajouter de nouvelles qualifications à l'avenir, cela sera plus flexible. Et pour info, il n'y a pas de type de données booléen dans MSSQL, peut-être que vous vouliez dire BIT?

+0

martins réponse était exactement ce que je cherchais, mais merci d'avoir signalé d'autres choses que je n'avais pas considérées. – fearofawhackplanet

Questions connexes