以下是该方案: 有老师教各种科目。主题包括章节。可能有不止一位教师教授相同的科目,但分配了不同的章节。章节内有主题,分主题(分层)。
我关注的是实体:章节,主题。章节有像teacher_id,subject_id,title,designated_hours这样的属性。主题(也有子主题和子主题可能包含其中的子主题,即分层)。主题属性是title,teaching_methodology,hours,periods,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
我的问题是我的结构是否正常化了?如果主题包含子主题,则hours,periods,completion_date,teaching_methodology等字段将为null。我应该为这些属性创建单独的表,如
topic_properties
-id
-topic_id (fk) references topic
-hours
-periods
您还可以提出其他数据库结构。我只是想确保在开始这个模块之前我得到了结构
答案 0 :(得分: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
。