2016-12-16 9 views
0

私は2つのタイプのエンティティを持つ学校管理システムに取り組んでいます。目的は異なるが属性/フィールドが同じ2つのテーブル

User 
----- 
UserId 
UserType 
Name 
ContactNumber 
Address 

出席者がマークされているすべての生徒/教師を保持します。

他のテーブルが

ContactDetails 
---- 
ContactId 
Name 
ContactNumber 
Address 

するcontactDetailsでは、(多くのマッピングに多くを持つマッピングテーブルを経由して)ユーザーの両親や親戚の情報をstrores、その出席がマークされていません。

私は既に、すべての資格情報が格納されているaspnetUsersテーブルを持っています。

連絡先の親(親族ではない)がシステムにログインしてデータを更新する必要があります。

2つのアプローチがあります。

  1. Usertype = Parentを作成すると、ドロップテーブルが連絡先を変更してすべてのリレーションを再マップします。 システムにログインすると、認証後に詳細を取得するためのユーザーテーブルだけが検索されます。

  2. aspNetRolesに親の役割を作成し、role = parentの場合は、情報の役割によってユーザーまたは連絡先を調べます。

異なる目的で同じフィールドを持つ2つの異なるエンティティが異なるテーブルに存在する必要がありますか?

答えて

1

同様の属性はヒントにする必要があります。あなたが持っているのは、異なる役割の1つのエンティティです。同じ人が先生と親の両方になれますか?後で生徒が先生や親になることはできますか?

多くのシステムは、異なるエンティティセットとしてさまざまなカテゴリの人々を処理し始めます。同じエンティティセットが適用される必要があり、複数のテーブルで同じクエリが実行されると、作業の重複が発生します。データベースの移入後に異なるエンティティセットを1つのスーパータイプに統一することは、少なくとも時間がかかる作業であり、困難なことがあります。これらの一般化を最初から組み込むことができれば、はるかに優れています。

私は、次のようなものをお勧め:

Persons (PersonId PK, Name, ContactNumber, Address) 
Users (PersonId PK/FK, Username, PasswordHash) 
Students (PersonId PK/FK, ...) 
Parents (PersonId PK/FK, ...) 
Relatives (PersonId PK/FK, ...) 
Teachers (PersonId PK/FK, ...) 

この方法は、すべての人々のための個人情報は、一つの場所に格納されており、人の役割固有の情報は、関連するサブタイプのテーブルのいずれかに記録することができます。

関連する問題