0

SQL Server 2012 MVC3 EF4.3.1 Code First プロジェクト。

1対多の関係を持つTeacherandStudentテーブルがあります。のTeacherテーブルIdはアカウント番号として使用されるため、そのId番号は とは別にする必要がありますStudent。プロパティの冗長性を減らすために、Personテーブル ( などの共有プロパティを含む)を作成したいと考えています。また、テーブルに対して 1 対多の関係があります。First, Last, Phone, EmailPersonAddress

Table per Hierarchy モデルを使用しTeacherStudent継承することを考えましPersonたが、ID セットが分離されず、Personテーブルで内部的に 1 対多の関係が必要になります。コードを使用して ID を生成することはできますが、内部の 1 対多で実行可能または実用的ですか?

別のシナリオは、andとand の間でPerson1 対 1 の子テーブルとして設定することですが、1 つのテーブルに 2 つの個別の 1 対 1 を作成する方法や可能性があるかどうかはわかりません。TeacherPersonStudentPerson

私がやりたいことを実行する実用的な方法はありPersonますか、それとも冗長性を心配してテーブルを使用しないでください。Address私がそのルートに行った場合、テーブル (Teacher-Addressおよび)に対して 2 つの個別の 1 対多の関係を持つことは可能でしょうStudent-Addressか? それとも、1 対多 ( Teacher-Address、教師は追加の配送先住所を持っている場合があります) と 1 対 1 ( Student-Address) ですか?

ありがとうございました

4

4 に答える 4

2

これを行う別の方法は、aPersonRoleテーブルの間に1対1を配置することです。 TeacherそしてStudent、この取り決めにおける単なる役割です。与えられRoleたものは多くの場合に満たすことができPersonます。

于 2012-07-05T17:02:52.997 に答える
1

IsTeacher フラグを使用して Person テーブルを作成することもできます。

于 2012-07-05T18:53:59.903 に答える
0

教師であることと学生であることは人々の役割であり、人々のタイプではありません。Peopleのテーブル、Personがコースの教師(場合によっては複数の教師)であることを示すTeachCourseテーブル、学生としてクラスに参加している人を示すAssistCourseテーブルが必要です。あるコースを教えて別のコースを支援する人がいるかもしれませんが、それは最初のバージョンでは適切にモデル化されていませんでした。

また、PeopleのContactInformationまたはShippingInformationテーブルを作成して、すべてのデータを指定することもできます(一部の人は、複数の電話または電子メールを持っている場合があります)。

于 2012-07-05T19:31:17.200 に答える
0

私は2つの可能性を見ることができます:

1つ: Person のベーステーブルから継承する Student と Teacher を使用し、「冗長性」について心配する必要はありません。学生と教師を個人ではなく個人に関連付けているため、冗長ではありません。データベースとDOMでは、PersonテーブルとPersonクラスは教師と学生の関係について何も知らず、それが人であることだけを知っています。教師と生徒の関係は、個人型ではなく、それぞれの型に格納されます。また、階層ごとのテーブルの代わりにタイプごとのテーブルを見てください。データベースを見ると、はるかにクリーンで鮮明になり、階層内の各タイプのすべての情報を 1 つのテーブルで取得することはできません。

2: 生徒と教師の両方が共有し、生徒と教師の両方のテーブルに個別に関連する情報を保持するテーブルを作成します。「ContactInformation」のように呼ぶことができます。

于 2012-07-05T19:00:33.100 に答える