设计一个尊重第三范式的简单数据库

时间:2013-02-02 15:00:31

标签: database sql-server-2008 database-design

我正在尝试为小型数据库作业完成3NF或第三范式。

我有学生,班级和家长。

以下是我需要制作的表格:

  • 学生: ID,姓名,年级(平均)

  • 班级: class_id,个人资料(班级类型),班级大师,班级中的学生

  • 家长:在学校注册的姓名,地址,学生

我应该指出的事情:

由于我的英语不太好,我想我应该说明:

  • 班级是一对多的关系,因为一个学生可以成为一个班级的一部分,而且只有一个班级(因此班级是学生的集合,没有别的)。

  • Profile是一个类的特化(同样,一个叫做class的学生分组机制)。 Ex:简介:数学,文学,计算机科学

[/我应该指出的事情]

同样,我必须制作符合3NF准则的表格,而不是与我刚才提到的表格完全相同的表格

我在想:

Class: 
   class_id primary key, foreign key (class_master_name) 

Profile: 
   class_master_name primary key, profile_name

Student: 
   student_id primary key, name, grade (avg), foreign key (class_id)

Parent: 
   parent_id primary key, name, address

因此,Class,Profile,Student和Parent将是3NF,因为所有非关键元素都严格指代密钥,整个密钥,只有密钥。

我的问题(或者需要答案的具体问题):

  • 学生是< - >阶级关系好吗?学生上课是否足够?我无法想象一个类可以引用学生而没有重复数据与2NF1NF冲突的方式。

  • 每个学生最多有两个父母(一个或两个可能已经死亡或根本不知道)。我在考虑有一个表Relationship: student_id, parent_1_id, parent_2_id,但我不知道如何实现它。我怎么能(在 SQL Server Management Studio 2008 中)创建此表(其中parent_1_id != parent_2_id 以及 student_idprimary key但是也是foreign key

  • 这实际上是3NF还是我做错了什么?

我如何考虑实施Relationship: student_id, parent_1_id, parent_2_id

CREATE TABLE Relationship (
     student_id int NOT NULL PRIMARY KEY,
     parent_1_id int,
     parent_2_id int,
     CONSTRAINT (parent_1_id, parent_2_id) FOREIGN KEY 
         REFERENCES Parent (parent_id, parent_id),
     CONSTRAINT  (student_id) FOREIGN KEY 
         REFERENCES Student (student_id)
)

可以吗?

2 个答案:

答案 0 :(得分:1)

看起来你需要类似的东西:

enter image description here

Class.ProfileIdStudent.ClassId不是NULL,而Parent1IdParent2Id是空的。)

答案 1 :(得分:-1)

ClassType:    
classtype (primary key)
name
etc...    

Class:
classid (primary key)
classtype (foreign key)
classname
etc...

Person:
personid (primary key)
name
dob
etc....

ClassStudent:
studentid (primary key)
classid (foreign key)
personid (foreign key)
grade
etc

PersonRelation:
relationid (primary key)
prim_personid (foreign key)
sec_personid (foreign key)
relationship (parent, sibling, etc)
etc