2013-02-05 126 views
2

這裏是場景: 有老師教各種學科。主題由章節組成。可能有不止一位教師講授相同的主題,但分配了不同的章節。章節中有主題,分主題(分層)。數據庫結構問題

我關心的是實體:章節,主題而已。章節具有像teacher_id,subject_id,title,designated_hours等屬性。主題(也有子主題和子主題可能包含其中的子主題,即分層)。主題屬性是標題,teaching_methodology,小時,句號,completion_date。

我提出的結構:

chapters     topics 
-id      -id 
-subject_id (fk)   -chapter_id (fk) references chapters 
-teacher_id (fk)   -parent_id (fk) references topics itself 
-title     -title 
-designated_hours   -hours 
          -periods 
          -completion_date 
          -teaching_methodology 

我的問題是我的結構是否標準化?如果主題具有子主題,則小時,句點,completion_date,teaching_methodology等字段將爲空。我應該爲這些屬性創建單獨的表,如

topic_properties 
    -id 
    -topic_id (fk) references topic 
    -hours 
    -periods 

您還可以提出其他數據庫結構。我只想確保在我開始使用本模塊之前獲得結構

+0

一章是否可以有多個(頂級)主題? –

+0

yes章節可以有多個頂級主題 – rockstar

+0

'句點'看起來有點可疑。你總是把它作爲一個整體來對待嗎?如果沒有(例如,如果它是逗號分隔的值列表),則違反[原子性](http://en.wikipedia.org/wiki/1NF#Atomicity)和1NF的原則。 –

回答

1

我認爲你在這裏的正確軌道上,並且不需要額外的表格。我只是做一個小的調整,以確保家長和孩子的話題不能屬於不同的章節:

CREATE TABLE chapters (
    chapter_id INT PRIMARY KEY 
    -- (other fields) 
); 

CREATE TABLE topics (
    chapter_id INT, 
    topic_no INT, 
    parent_topic_no INT, 
    -- (other fields) 
    PRIMARY KEY (chapter_id, topic_no), 
    FOREIGN KEY (chapter_id) 
     REFERENCES chapters (chapter_id), 
    FOREIGN KEY (chapter_id, parent_topic_no) 
     REFERENCES topics (chapter_id, topic_no) 
); 

注二等FK如何迫使子行具有相同chapter_id作爲父行。

[SQL Fiddle]

+0

謝謝你的幫助 – rockstar