47 votes

SQL Server Management Studio - ajout d'une clé étrangère déroutant?

Je trouve qu'il est toujours déroutant pour ajouter des clés étrangères de la table primaire dans Management Studio.

Disons que j'ai un

Table1 
{
    ID int, -- Primary Key
    Table2ID int, -- Refers to Table2's ID 
}

Table2 
{
    ID int, -- Primary Key
    SomeData nvarchar(50)
}

Je suis l'ajout d'une clé étrangère de la table 1 en Right Click -> Relationships -> Table and column specification. Je suis en train de "Primaire" popups à la Table2, ID et "Clé Étrangère de la Table" pour Table1, Table2ID.

Mes questions:

  1. Ne devrait pas Table2 être listé pour "La Clé étrangère de la Table" Table1 et pour Clé Primaire? Est ma compréhension de mal?

  2. Lorsque j'enregistre je reçois une alerte "Les tableaux suivants seront enregistrées dans votre base de données." et il montre les deux tables. Je n'ai vraiment pas l'obtenir. J'ai seulement changé la Table1. Pourquoi est le deuxième tableau ci?

109voto

Zach Points 896
  • Cliquez sur l'expansion de symbole à côté de la table.
  • Clic droit sur le "Clés" du dossier et sélectionnez "Nouvelle Clé Étrangère."
  • (Alternativement, vous pouvez cliquer sur le bouton de rapports sur la toolstrip lorsque vous avez la table ouvrir)
  • Cliquez sur le bouton "..." sur les "Tables et les Colonnes" Caractéristiques de ligne pour ouvrir l'éditeur.
  • Le menu déroulant sur la gauche de la table que vous êtes en train d'ajouter à partir de, et le champ de texte statique sera la liste de la table que vous êtes en train d'ajouter de.
  • Utilisez les listes déroulantes pour spécifier vos contraintes, et assurez-vous que les deux côtés ont le même nombre de colonnes.

22voto

marc_s Points 321990

Pourquoi ne pas simplement utiliser l'équivalent de T-SQL?? Semble beaucoup plus facile et moins confus pour moi:

ALTER TABLE dbo.Table1
  ADD CONSTRAINT FK_Table1_Table2
    FOREIGN KEY(Table2ID) REFERENCES dbo.Table2(ID)

Quand je lis cela, je crois que c'est tout à fait clair que les deux tables sont impliqués, et de la manière dont ils sont connectés (Table1.Table2ID --(références)--> Table2.ID)

Si vous voulez rester dans la SSMS concepteur de monde: vous pouvez également créer un schéma de base de données de vos tables impliquées, et puis il suffit de glisser et déposez vos Table2ID colonne Table1 sur Table2 et déposez-la sur le ID colonne - cela serait graphiquement dire SSMS ce que vous voulez faire, et vous avez juste besoin d'examiner de votre choix et cliquez sur OK dans la boîte de dialogue qui apparaît.

9voto

Ann L. Points 7456

1.Ne devrait pas Table2 être répertoriés pour la "Clé Étrangère de la Table" Table1 et pour Clé Primaire? Est ma compréhension de mal?

Je crois que votre compréhension est erronée. Table2 est la table dont la clé primaire référencée. Par conséquent, il est répertorié sous Clé Primaire. Table1 est la table qui sera la clé étrangère (la référence à la clé primaire d'une autre table); par conséquent, il est répertorié sous "Clé Étrangère de la Table".

Aussi loin que pourquoi les deux tables sont enregistrées, même si la clé étrangère est répertorié par la suite comme appartenant à la Table1: je crois que c'est parce que la clé étrangère contraint les deux tables. Ils ont tous deux pour "savoir" à propos de la contrainte, de sorte qu'ils ont tous deux besoin d'être sauvé.

1voto

Deepesh Points 591
ALTER TABLE dbo.Table1
  ADD CONSTRAINT FK_Table1_Table2
    FOREIGN KEY(Table2ID) REFERENCES dbo.Table2(ID)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X