您将如何解决此数据库设计问题

时间:2015-11-14 13:19:38

标签: sql database-design

我对数据库相当陌生,并且一直在使用书籍和教程来学习数据库的Chen符号。

我正在研究一个例子,其中我的一个实体图有两种强实体连接到弱实体的情况。

这意味着弱实体将拥有2个外键:来自两个强实体的主键。

以下是我要解决的设计问题图: http://imgur.com/GXa0KSP

根据我的新手理解,这是不正确的,它在创建数据库表时无效。

所以我自己的解决方案是创建一个基类,即" person"连接到"依赖"实体和人员也是学生和教师的专业化阶层。

这是正确的方法吗?

或者有更简单的方法来解决这个问题吗?

请帮助

由于

1 个答案:

答案 0 :(得分:0)

也许你正试图向后定义FK。

这个SQL工作得很好

create table student (
     ID     int identity not null   primary key
    ,Name   varchar(20) not null    unique nonclustered
)

create table teacher(
     ID     int identity not null   primary key
    ,Name   varchar(20) not null    unique nonclustered
);

create table dependents(
     ID     int identity not null   primary key clustered
    ,StudentID int references student(ID)
    ,TeacherID int references teacher(ID)

    unique nonclustered (StudentID,TeacherID)
);

insert student(Name) values   ('Fred'),('George');
insert teacher(Name) values   ('Minerva'),('Severus');
insert dependents(StudentID,TeacherID)
select
    student.ID,teacher.ID
from (values
     ('Fred',  'Minerva')
    ,('George','Minerva')
    ,('Fred',  'Severus')
)d(StudentName,TeacherName)
join student on student.Name = d.StudentName
join teacher on teacher.Name = d.TeacherName;

select
     StudentName = student.Name
    ,TeacherName = teacher.Name
from dependents
join student on student.ID = dependents.StudentID
join teacher on teacher.ID = dependents.teacherID

drop table dependents;
drop table teacher;
drop table student;

按要求屈服:

StudentName          TeacherName
-------------------- --------------------
Fred                 Minerva
Fred                 Severus
George               Minerva