【问题标题】:Referencing Primary Keys as Foreign Keys in other tables, SQL Server ASP.NET Web App在其他表中引用主键作为外键,SQL Server ASP.NET Web App
【发布时间】:2015-08-10 17:00:41
【问题描述】:

我正在尝试使用 Visual Studio 在 asp.net Web 应用程序的 er 图中创建一个表来表示以下关系:

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

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

表架构 个人 ID、教师 ID、名字、姓氏、日期和时间、个人 ID(管理员)

其他相关架构

人(超类) 个人 ID(PK)、姓名、出生日期、

学生(子类,不相交) 个人 ID(PK)、学生 ID、名字、姓氏、出生日期、年龄

教师(子类,脱节) 个人 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])
);

我认为我无法创建表,因为我无法区分我正确引用的 Person ID?我该如何解决这个问题?

【问题讨论】:

  • 旁注:尽量避免在表格或列名中放置单引号/任何特殊字符或空格。

标签: sql-server asp.net-mvc


【解决方案1】:

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

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

每个教师条目都将映射到添加它的管理员。这里似乎不需要任何连接表(即多对多关系通常需要连接表)。

同样,您的列名有点误导。为什么你有多个角色标识符? IE。为什么管理员有管理员 ID 和人员 ID?我的回答对这些 ID 做了很多假设,但你应该明白了。

只需创建一个从teacher 表到admin 表的FK 来覆盖一对多的关系。

【讨论】:

  • 谢谢托马斯,我明白你的意思了。当我应该扩充 PK 以在现有表中充当 FK 时,我一直在创建新表。
猜你喜欢
  • 2012-07-11
  • 2014-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-21
  • 2011-03-11
  • 2017-03-10
  • 1970-01-01
相关资源
最近更新 更多