Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server ASP.NET Web App将主键引用为其他表中的外键_Sql Server_Asp.net Mvc - Fatal编程技术网

Sql server SQL Server ASP.NET Web App将主键引用为其他表中的外键

Sql server SQL Server ASP.NET Web App将主键引用为其他表中的外键,sql-server,asp.net-mvc,Sql Server,Asp.net Mvc,我正在尝试使用visual studio创建一个表,以表示asp.net web应用程序中er图中的以下关系: 管理员添加一名教师 一对多,教师实体完全参与,因为每个教师只能由管理员添加 一个管理员添加多个教师,一个管理员添加一个教师。每个教师实体必须参与该关系,而不是每个管理员都参与添加教师的关系,因为他们可能永远不会添加教师 表模式 人员ID、教师ID、姓名、姓氏、日期和时间、人员ID(管理员) 其他相关模式 个人(超级班) 人员ID(PK)、姓名、D.O.B、 学生(不相交的子类) 个人I

我正在尝试使用visual studio创建一个表,以表示asp.net web应用程序中er图中的以下关系:

管理员添加一名教师 一对多,教师实体完全参与,因为每个教师只能由管理员添加

一个管理员添加多个教师,一个管理员添加一个教师。每个教师实体必须参与该关系,而不是每个管理员都参与添加教师的关系,因为他们可能永远不会添加教师

表模式 人员ID、教师ID、姓名、姓氏、日期和时间、人员ID(管理员)

其他相关模式

个人(超级班) 人员ID(PK)、姓名、D.O.B、

学生(不相交的子类) 个人ID(PK)、学生ID、姓名、姓氏、D.O.B、年龄

教师(不相交的小班) 人员ID(PK)、教师ID、姓名、姓氏

管理员(子类,不相交) 个人ID(PK)、管理员ID、姓名、姓氏

到目前为止,我已经尝试:

CREATE TABLE [dbo].[Administrator's Teacher] (
[Person ID]  INT  NOT NULL,
[Teacher ID] INT          NOT NULL,
[First Name] VARCHAR (50) NOT NULL,
[Surname]    VARCHAR (50) NOT NULL,
[Person ID] INT NOT NULL,
PRIMARY KEY CLUSTERED ([Person ID] ASC) 
REFERENCES [dbo].[Teacher] ([Person ID]),
FOREIGN KEY ([Person ID])
REFERENCES [dbo].[Administrator] ([Person ID])
);

我想我无法创建该表,因为我无法区分正确引用的是哪一个人ID?如何解决此问题?

如果管理员和教师之间存在多对一关系,则以下内容就足够了:

create table dbo.Teacher 
(
    [Person ID] int not null primary key clustered, 
    [Teacher ID] int not null, 
    [First Name] varchar(64) not null, 
    Surname varchar(64) not null,
    AdministratorId int not null 
        foreign key references dbo.Administrator([Person ID])
);
go
每个教师条目都将映射到添加它的管理员。这里似乎不需要任何联接表(即多对多关系通常需要联接表)

同样,您的列名也有点误导。为什么角色有多个标识符?也就是说,为什么一个管理员有一个管理员ID和一个个人ID?我的回答假设了那么多关于这些ID的信息,但你应该明白这一点


只需创建一个从教师表到管理员表的FK,以涵盖一对多关系。

如果这是管理员和教师之间的多对一关系,以下内容就足够了:

create table dbo.Teacher 
(
    [Person ID] int not null primary key clustered, 
    [Teacher ID] int not null, 
    [First Name] varchar(64) not null, 
    Surname varchar(64) not null,
    AdministratorId int not null 
        foreign key references dbo.Administrator([Person ID])
);
go
每个教师条目都将映射到添加它的管理员。这里似乎不需要任何联接表(即多对多关系通常需要联接表)

同样,您的列名也有点误导。为什么角色有多个标识符?也就是说,为什么一个管理员有一个管理员ID和一个个人ID?我的回答假设了那么多关于这些ID的信息,但你应该明白这一点


只需从教师表到管理员表创建一个FK,以涵盖一对多关系。

旁注:尽量避免在表或列名中使用单引号/任何特殊字符或空格。旁注:尽量避免在表或列名中使用单引号/任何特殊字符或空格。谢谢Thomas,我明白你的意思。我一直在创建新表,而我应该在现有表中增加一个PK来充当FK。谢谢Thomas,我明白你的意思了。我一直在创建新表,而我本应在现有表中扩充PK以充当FK。