1

私は小さなデータベースの宿題のために3NFまたは第3正規形を達成しようとしています。

生徒、クラス、保護者がいます。

これが私が作る必要のあるテーブルです:

  • 学生: ID、名前、学年(avg)

  • クラス: class_id、profile(クラスのタイプ)、class_master、上記のクラス内の学生

  • 親:名前、住所、学校に在籍している生徒

私が指摘しなければならないこと:

私の英語はそれほど上手ではないので、私は次のように指定する必要があると思いました。

  • 1人の生徒が1つのクラスに参加でき、1人だけであるため、クラスは1対多の関係になります(したがって、クラスは生徒の集まりであり、他には何もありません)。

  • プロファイルはクラスの特殊化です(ここでも、クラスと呼ばれる学生のグループ化メカニズム)。例:プロフィール:数学、文学、コンピューターサイエンス

[/指摘すべきこと]

繰り返しになりますが、今述べたものとまったく同じテーブルではなく、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

したがって、クラス、プロファイル、生徒、保護者は3NFになります。これは、すべての非キー要素が厳密にキー、キー全体、およびキーのみを参照するためです。

私の問題(または答えが必要な特定の質問):

  • 生徒の<->クラスの関係は大丈夫ですか?学生がクラスを参照するだけで十分ですか?2NFまたは1NFと競合するデータを繰り返すことなく、クラスが生徒を参照できる方法を想像することはできませんでした。

  • 各生徒には最大2人の親がいます(1人、または両方が死亡しているか、単に不明である可能性があります)。私はテーブルを持つことを考えていましたRelationship: student_id, parent_1_id, parent_2_idが、これを実装する方法がわかりません。( SQL Server Management Studio 2008で)このテーブルを作成するにはどうすればよいですか(ここでparent_1_id != parent_2_id 、また student_id、ですprimary keyforeign 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)
)

大丈夫ですか ?

4

2 に答える 2

1

これに似たものが必要なようです:

ここに画像の説明を入力してください

Class.ProfileIdおよびStudent.ClassIdはNULLではありませんが、Parent1IdおよびParent2IdはNULL可能です。)

于 2013-02-02T20:29:03.853 に答える
-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
于 2013-02-02T15:38:11.103 に答える