CLÉ ÉTRANGÈRE: ne contient aucune key primaire ou candidate

Dans SQL Server, j'ai cette erreur ->

SQL71516 :: The referenced table '[dbo].[PostsTags]' contains no primary or candidate keys that match the referencing column list in the foreign key. If the referenced column is a computed column, it should be persisted. 

Je ne comprends pas pourquoi dint fonctionne key étrangère, sans leur table créée sans problèmes, mais j'ai besoin d'une relation entre les tables, à cet endroit.J'ai regardé d'autres questions similaires, mais les réponses n'ont pas été trouvées.

 CREATE TABLE [dbo].[PostsTags] ( [PostId] INT NOT NULL, [TegId] INT NOT NULL, CONSTRAINT [PK_PostsTags] PRIMARY KEY CLUSTERED ([PostId] ASC, [TegId] ASC) ); CREATE TABLE [dbo].[Comments] ( [Id] INT IDENTITY (1, 1) NOT NULL, [PostId] INT NOT NULL, [DateTime] DATETIME NOT NULL, [Name] NVARCHAR (64) NOT NULL, [Body] NVARCHAR (MAX) NOT NULL, PRIMARY KEY CLUSTERED ([Id] ASC) ); CREATE TABLE [dbo].[Tags] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Name] NVARCHAR (64) NOT NULL, PRIMARY KEY CLUSTERED ([Id] ASC), CONSTRAINT [FK_Tags_PostsTags] FOREIGN KEY ([Id]) REFERENCES [PostsTags]([TegId]) ON DELETE CASCADE ); CREATE TABLE [dbo].[Posts] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Title] NVARCHAR (128) NOT NULL, [DateTime] DATETIME NOT NULL, [Body] NVARCHAR (MAX) NOT NULL, [Avtor] NVARCHAR (64) NOT NULL, PRIMARY KEY CLUSTERED ([Id] ASC), CONSTRAINT [Post_Tag] FOREIGN KEY ([Id]) REFERENCES [PostsTags]([PostId]) ON DELETE CASCADE, CONSTRAINT [Post_Comment] FOREIGN KEY ([Id]) REFERENCES [Comments]([PostId]) ON DELETE CASCADE, ); 

Désolé pour mon mauvais anglais.

Ce que tu veux c'est ça, j'en suis sûr:

 CREATE TABLE [dbo].[Tags] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Name] NVARCHAR (64) NOT NULL, PRIMARY KEY CLUSTERED ([Id] ASC) ); CREATE TABLE [dbo].[Posts] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Title] NVARCHAR (128) NOT NULL, [DateTime] DATETIME NOT NULL, [Body] NVARCHAR (MAX) NOT NULL, [Avtor] NVARCHAR (64) NOT NULL, PRIMARY KEY CLUSTERED ([Id] ASC) ); CREATE TABLE [dbo].[PostsTags] ( [PostId] INT NOT NULL, [TagId] INT NOT NULL, CONSTRAINT [PK_PostsTags] PRIMARY KEY CLUSTERED ([PostId] ASC, [TagId] ASC), CONSTRAINT [FK_PostsTags_Tags] FOREIGN KEY ([TagId]) REFERENCES [Tags]([Id]) ON DELETE CASCADE, CONSTRAINT [FK_PostTags_Posts] FOREIGN KEY ([PostId]) REFERENCES [Posts]([Id]) ON DELETE CASCADE ); CREATE TABLE [dbo].[Comments] ( [Id] INT IDENTITY (1, 1) NOT NULL, [PostId] INT NOT NULL, [DateTime] DATETIME NOT NULL, [Name] NVARCHAR (64) NOT NULL, [Body] NVARCHAR (MAX) NOT NULL, PRIMARY KEY CLUSTERED ([Id] ASC), CONSTRAINT [FK_Comments_Posts] FOREIGN KEY ([PostId]) REFERENCES [Posts](Id) ON DELETE CASCADE ); 

C'est-à-dire que vous pouvez insert librement dans Tags ou Posts sans tenir count des autres tables ou données qui s'y trouvent. Une fois qu'il y a une ligne dans Posts , vous pouvez commencer à append des lignes aux Comments , à condition que la colonne PostId contienne une valeur qui existe déjà dans la colonne Id la table Posts ( Comments references Posts )

En outre , une fois qu'il y a des lignes dans Posts et Tags , vous pouvez seulement insert des lignes dans PostTags , avec à nouveau des contraintes sur les valeurs valides dans cette table basées sur les lignes actuelles dans Posts et Tags .

Enfin, j'ai laissé vos options CASCADE comme dans votre original. Si quelqu'un supprime une ligne de Posts toutes les lignes des Comments associés à ce message sont supprimées. De même, toutes les lignes dans PostsTags qui se rapportent à la publication sont supprimées. Si quelqu'un supprime une ligne de Tags alors toutes les lignes de PostsTags qui font reference à cette balise sont supprimées.