Dire que j'ai la suite de définitions de table dans SQL Server 2008:
CREATE TABLE Person
(PersonId INT IDENTITY NOT NULL PRIMARY KEY,
Name VARCHAR(50) NOT NULL,
ManyMoreIrrelevantColumns VARCHAR(MAX) NOT NULL)
CREATE TABLE Model
(ModelId INT IDENTITY NOT NULL PRIMARY KEY,
ModelName VARCHAR(50) NOT NULL,
Description VARCHAR(200) NULL)
CREATE TABLE ModelScore
(ModelId INT NOT NULL REFERENCES Model (ModelId),
Score INT NOT NULL,
Definition VARCHAR(100) NULL,
PRIMARY KEY (ModelId, Score))
CREATE TABLE PersonModelScore
(PersonId INT NOT NULL REFERENCES Person (PersonId),
ModelId INT NOT NULL,
Score INT NOT NULL,
PRIMARY KEY (PersonId, ModelId),
FOREIGN KEY (ModelId, Score) REFERENCES ModelScore (ModelId, Score))
L'idée ici est que chaque Personne ne peut avoir qu'un ModelScore par Modèle, mais chaque Personne peut avoir un score pour un certain nombre de Modèles définis. Aussi loin que je peux dire, c'SQL doit faire respecter ces contraintes naturellement. Le ModelScore a un "sens", qui est contenue dans la Définition. Rien de fracassant là.
Maintenant, j'essaie de traduire ce dans le Cadre de l'Entité à l'aide de la designer. Après la mise à jour du modèle de la base de données et en faisant le montage, j'ai une Personne, un objet, un objet de Modèle, et un ModelScore objet. PersonModelScore, étant une table de jointure n'est pas un objet mais plutôt est inclus comme une association avec un autre nom (disons ModelScorePersonAssociation). La cartographie de détails pour l'association sont les suivants:
- Association - Cartes de PersonModelScore - ModelScore ModelId : Int32 <=> ModelId : int Score : Int32 <=> Score : int - Personne PersonId : Int32 <=> PersonId : int
Sur le côté droit, le ModelId et PersonId valeurs de clé primaire symboles, mais le Score ne prend pas de valeur.
Lors de la compilation, j'obtiens:
Error 3002: Problem in Mapping Fragment starting at line 5190: Potential runtime violation of table PersonModelScore's keys (PersonModelScore.ModelId, PersonModelScore.PersonId): Columns (PersonModelScore.PersonId, PersonModelScore.ModelId) are mapped to EntitySet ModelScorePersonAssociation's properties (ModelScorePersonAssociation.Person.PersonId, ModelScorePersonAssociation.ModelScore.ModelId) on the conceptual side but they do not form the EntitySet's key properties (ModelScorePersonAssociation.ModelScore.ModelId, ModelScorePersonAssociation.ModelScore.Score, ModelScorePersonAssociation.Person.PersonId).
Qu'ai-je fait de mal dans le concepteur ou le contraire, et comment puis-je corriger l'erreur?
Merci beaucoup!