2012-03-15 5 views
1

私が持っているデータを使って3NFを達成しようとしていますが、混乱しています。これらは私が持っているテーブルです。SQL 3NFの正規化を実現する

FACULTY table DEPARTMENT table  STUDSGROUP table   STUDENT table 
FACULTY_ID  DEPARTMENT_ID   STUDSGROUP_ID   STUDENT_ID 
FACULTY_NAME  DEPARTMENT_NAME   ACADEMIC YEAR   STUDENTS_NAME 
FACULTY_DEAN  HEAD OF DEPARTMENT  COURSE/SPECIALITY  STUDENTS_GROUP 
                    COURSE/SPECIALITY 
                    DOB/DATE OF BIRTH 

私は適切ではないと思うけれども、私は、私は以下のようにそれを行うことができます考えています。

FACULTY table 
FACULTY_ID,PK 
DEAN 

DEPARTMENT table 
DEPARTMENT_ID,PK 
FACULTY_ID,fk 
DEPARTMENT_NAME 
HEAD OF DEPARTMENT 


STUDSGROUP table 
STUDSGROUP_ID, pk 
ACADEMIC YEAR 
SPECIALITY 

STUDENTS table 
STUDENT_ID, pk 
FACULTY_NAME,FK 
STUDSGROUP_ID,FK 
FIRST_NAME 
LAST_NAME 
DOB 
+0

なぜ3NFを達成しようとしているのかを知るのに役立つかもしれません(これは宿題であれば、宿題タグを追加できますか?人々は助けても構いませんが知りたいです)。また、3NFとは思わないデザインについてはどうですか? –

+1

私は宿題タグを付け加えました。私はそれをやるのを忘れていました。私は正規化について学びたいと思っていました。私はこれをもっと理解しやすくするための例としてこれを考えました。 – kryticrecte

+0

私は正しいことをしていますか? – kryticrecte

答えて

3

正規化では、スキーマのさまざまな部分がどのように関連しているかを知る必要があります。最大3NFとBCNF(ほとんど同じですが、BCNFにもない3NFの実用的な例を見つけるのは困難ですが、ほとんど同じことではありません)、最も重要な機能は機能依存です。

もう1つの重要なポイントは '保存'です。あなたは列を完全に失うべきではありません。たとえば、元のFacultyテーブルにはID番号、名前、および学長があります。あなたの改訂版には教員名がありません。それはあなたの再設計のバグです。

あなたは、各部門が教員に所属していると確信していますが、それは十分考えられます。

あなたの改訂された学生グループのテーブルは元のものと同じようです。それはおそらくOKですが、おそらくコース/専門の部分は、学生グループが部署、したがって教員に関連付けられていることを意味します。そうであれば、コース/専門分野と部門を識別するコース/専門分野の表が必要になり、学生グループはコース/専門分野の特定の年度グループを特定する必要があります。

元の学生テーブルには、コース/専門分野と学生グループがあります。これにより、生徒Xが学生表で考古学を行っているとデータが示す可能性がありますが、生徒グループは生徒Xが音楽を行っていることを示します。それは許されますか?そうでない場合は、StudentsテーブルにStudent Groupを置いて、コース/専門分野、年、部署、そして教員を特定するだけでよいでしょうか?改訂されたスキーマはstudentsテーブルに教員IDを追加します(ただし、コース/専門分野は削除されます)。それでもデータ内の紛争の機会が残されています。

有効な学年を特定するための表が必要ですか?おそらくない。スタッフのテーブルがあるので、学長や部長を特定できます。教員の部長が部長であることはできますか?教員以外の部署

+0

あなたはあなたが正しいと思うあなたにポイントを得る – kryticrecte