繁体   English   中英

将外键从多对多关系导出到另一个表sql

[英]Exporting foreign key from many to many relationship to another table sql

我有桌子

CREATE TABLE [dbo].[CoursesOfferedToBatches] (
    [CourseId] VARCHAR (50) NOT NULL,
    [Batch]    INT          NOT NULL,
    PRIMARY KEY CLUSTERED ([Batch] ASC, [CourseId] ASC),
    CONSTRAINT [FK_OfferedCourses_ToCourses] FOREIGN KEY ([CourseId]) REFERENCES [dbo].[Courses] ([Id]),
    CONSTRAINT [FK_CoursesOfferedToBatches_ToBatches] FOREIGN KEY ([Batch]) REFERENCES [dbo].[Batches] ([Id])
);

当我将CourseId作为外键从上表导出到下表时,如下图所示,它给出了下表所示的错误

CREATE TABLE [dbo].[StudentsRegisterToCoursesOffered]
(
    [StudentId] UNIQUEIDENTIFIER NOT NULL , 
    [CourseId] VARCHAR(50) NOT NULL, 
    PRIMARY KEY ([CourseId], [StudentId]), 
    CONSTRAINT [FK_StudentsRegisterToCoursesOffered_ToStudents] FOREIGN KEY ([StudentId]) REFERENCES [Students]([StudentId]), 
    CONSTRAINT [FK_StudentsRegisterToCoursesOffered_ToCoursesOffered] FOREIGN KEY ([CourseId]) REFERENCES [CoursesOfferedToBatches]([CourseId])
)

错误:

由于验证错误,更新无法继续。 请更正以下错误,然后重试。

SQL71516 ::引用表'[dbo]。[CoursesOfferedToBatches]'不包含与外键中的引用列列表匹配的主键或候选键。 如果引用的列是计算列,则应保留该列。

我的问题到此结束,但是为了添加参考,我添加了所有相关表格:

CREATE TABLE [dbo].[Courses] (
    [Id]   VARCHAR (50)  NOT NULL,
    [Name] VARCHAR (100) NOT NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);


CREATE TABLE [dbo].[Students] (
    [StudentId]      UNIQUEIDENTIFIER NOT NULL,
    [DepartmentName] VARCHAR (50)     NOT NULL,
    [Address]        VARCHAR (250)    NULL,
    [TwitterLink]    VARCHAR (100)    NULL,
    [FacebookLink]   VARCHAR (100)    NULL,
    [MemberSince]    DATETIME         NULL,
    [ProfileViews]   BIGINT           DEFAULT ((0)) NULL,
    [CNIC]           CHAR (15)        NULL,
    [AboutMe]        VARCHAR (3000)   NULL,
    PRIMARY KEY CLUSTERED ([StudentId] ASC),
    CONSTRAINT [FK_Students_ToStudents] FOREIGN KEY ([StudentId]) REFERENCES [dbo].[Users] ([UserId]),
    CONSTRAINT [FK_Students_ToDepartments] FOREIGN KEY ([DepartmentName]) REFERENCES [dbo].[Departments] ([Name])
);


CREATE TABLE [dbo].[Batches] (
    [Id] INT NOT NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);

CoursesOfferedToBatches需要具有自己的主键,您已将其创建为复合键PRIMARY KEY CLUSTERED ([Batch] ASC, [CourseId] ASC) 这是这将是一个外键,该化合物键StudentsRegisterToCoursesOffered而不仅仅是CourseId

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM