2015-11-14 68 views
0

我對數據庫相當陌生,一直在使用書籍和教程來學習數據庫的陳述。你將如何解決這個數據庫設計問題

我正在通過一個示例來說明我的一個實體圖有兩個強實體連接到一個弱實體的情況。

這意味着弱實體會有2個外鍵:來自兩個強實體的主鍵。

這裏是設計的問題,我試圖解決的示意圖: http://imgur.com/GXa0KSP

據我瞭解的新手,這是不正確,就不會創建數據庫表時的工作。

所以我自己的解決方案是創建連接到「依賴」實體「的人也是專業化班學生和老師的基類,即「人」 ..

這是正確的方法做到這一點?

還是有解決這個更簡單的方法?

敬請幫助

感謝

+1

爲什麼你認爲它不會工作?當你嘗試時發生了什麼? –

+0

「這意味着弱實體會有兩個外鍵:來自兩個強實體的主鍵。」它會顯示爲空的學生在尋找教師時,反之亦然....不是很好的做法IMO – xirokx

回答

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 
+0

謝謝,但我怎麼看待學生的家屬:喬治或我如何看到Minerva的家屬?我更關心的不是教師與哪個學生相關的家屬,反之亦然...... – xirokx

+0

@xirokx:在最後的SELECT語句中添加where子句和其他列。如果方便的話,甚至可以將其定義爲VIEW。 –

+0

我不會收到NULL字段嗎?例如,如果我選擇查看學生家屬,教師家屬將爲NULL,反之亦然......您是否嘗試過? – xirokx