私は小さなデータベースの宿題のために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 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)
)
大丈夫ですか ?