关系很多很多

时间:2016-01-28 10:52:14

标签: sql-server

我想创建关系多对多的数据库。但我有错误

  

SQL71516 ::引用的表'[dbo]。[BookAuthors]'包含no   与引用列列表匹配的主键或候选键   外键。如果引用的列是计算列,则为   应该坚持下去。 SQL71516 ::引用的表   '[dbo]。[BookAuthors]'不包含匹配的主键或候选键   外键中的引用列列表。如果引用   column是一个计算列,应该是持久化的。

如何解决这个问题?

CREATE TABLE [dbo].[BookAuthors] (
    [Book]   INT NOT NULL,
    [Author] INT NOT NULL,
    PRIMARY KEY CLUSTERED ([Book] ASC,[Author] ASC)
);

CREATE TABLE [dbo].[Books] (
    [Id]       INT            NOT NULL,
    [Title]    NVARCHAR (MAX) NULL,
    [Price]    MONEY          NULL,
    [Category] INT            NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC),
    FOREIGN KEY ([Id]) REFERENCES [dbo].[BookAuthors] ([Book])
);

CREATE TABLE [dbo].[Authors] (
    [Id]   INT        NOT NULL,
    [Name] NCHAR (10) NOT NULL,
    PRIMARY KEY CLUSTERED ([Id]), 
    FOREIGN KEY ([Id]) REFERENCES [dbo].[BookAuthors] ([Author])
);

2 个答案:

答案 0 :(得分:2)

你在BookAuthors复合主键中包含了两个列:Book和Author。引用它时,您需要引用这两列。 其他解决方案是在BookAuthors中创建第三列(可能是标识符),它将是主键并引用它。

答案 1 :(得分:0)

以下图片显示表格结构。

Table Structure