Sql server 扩展SQL表
我有4个SQL表:用户、学生、教授和出版物Sql server 扩展SQL表,sql-server,tsql,Sql Server,Tsql,我有4个SQL表:用户、学生、教授和出版物 用户具有任何类型用户的公共列 学生有特定于学生的列 教授有专门针对教授的专栏 只有教授才能出版 因此,我: create table dbo.[User] ( Id int identity not null constraint PK_User_Id primary key clustered (Id), -- Other user columns ) create table dbo.Student ( Us
- 用户具有任何类型用户的公共列李>
- 学生有特定于学生的列李>
- 教授有专门针对教授的专栏李>
- 只有教授才能出版
create table dbo.[User] (
Id int identity not null
constraint PK_User_Id primary key clustered (Id),
-- Other user columns
)
create table dbo.Student (
UserId int not null
constraint PK_Student_UserId primary key clustered (Id),
-- Other student columns
)
create table dbo.Professor (
UserId int not null
constraint PK_Professor_Id primary key clustered (Id),
-- Other student columns
)
create table dbo.Publication (
Id int identity not null
constraint PK_Publication_Id primary key clustered (Id),
UserId int not null
-- Other student columns
)
alter table dbo.Student
add constraint FK_Student_UserId foreign key (UserId) references dbo.[User](Id);
alter table dbo.Professor
add constraint FK_Professor_UserId foreign key (UserId) references dbo.[User](Id);
alter table dbo.Publication
add constraint FK_Publication_UserId foreign key (UserId) references dbo.Professor(Id);
问题
我是否应该在教授和学生表中使用列Id作为PK?例如,将(Id,UserId)作为教授的主键(与学生相同)
然后发布将引用Professor.Id而不是Professor.UserId 我这样问是因为有出版物引用Professor表中的用户ID听起来很奇怪,当我有更多的表时,这可能会让人困惑
有人能给我一些建议吗?在您当前的模式安排中,在不了解您的用例(以编程方式)的情况下,您可以提出这样的论点:您不需要任何扩展表的Id-identity列。我认为这将是一个1到1的关系到用户表无论如何,所以你至少想要一个独特的约束在USEID列,你会得到通过使它成为PK无论如何。 < P>我想考虑的事情是:
- 教授能成为不同的用户吗
- 一个教授是否可能在没有使用者的情况下生存
- 一个用户可能是两个教授(多个学科)吗
- 用户表
- 用户ID
- 学生桌
- 学生
- UserFk
- Table教授
- 教授
- UserFk
- 教授出版表
- FK教授
- 出版物FK
- 发布表
- 出版物ID
因此,这部分是基于您希望如何处理数据,部分是基于您的偏好。是的,这是一种1对1的关系,这就是我使用UserId作为PK的原因。这涵盖了。。。问题是,如果我应该有一个额外的列作为PK,那么其他表与这个表相关,ID为Professor,因此更明显的是,它只与Professor相关,而不是与用户表中的所有用户相关。我个人不会使用额外的空间使设计自我记录,虽然我当然能理解有人这么做。一个用户可以是不止一个教授吗,也就是说,教授身份是衡量用户教授多少门课程的尺度吗?用户可以同时是学生和教授吗?我建议在所有表中都使用主键。我还建议不要使用通用列ID作为每个表的主键。这有两个挑战,一个是名称完全不明确。第二个问题是列的名称在表之间发生变化,这是一个很难处理的问题。在每个表中使用UserID。学生和教授也一样。你的建议可能有道理,但在我的情况下,教授总是同一个用户。。。这是一种1对1的关系……教授表和学生表只是用户表的扩展。在这种情况下,出版物只能由教授撰写。