2016-12-16 156 views
0

我正在研究具有兩種類型的實體的學校管理系統。兩張表具有不同的用途,但具有相同的屬性/字段

User 
----- 
UserId 
UserType 
Name 
ContactNumber 
Address 

它保存所有學生/老師的出席標記。

另一表是

ContactDetails 
---- 
ContactId 
Name 
ContactNumber 
Address 

ContactDetails strores父母和用戶的親屬的信息(經由具有多對多映射映射表)和他們的出席未被標記。

我已經有一個aspnetUsers表,其中存儲了所有憑據。

現在的變化是,聯繫人的父母(不是親屬)需要登錄到系統並更新數據。

有兩種方法。

  1. 創建一個Usertype = Parent,刪除表聯繫人並重新映射所有關係。 登錄系統只會查看用戶表以獲得身份驗證後的詳細信息。

  2. 在aspNetRoles中創建父項的角色,當role = parent時,根據信息角色查找User或Contacts。

是否需要將兩個不同目的但字段相同的不同實體放在不同的表中?

回答

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, ...) 

這樣一來,所有的人的個人信息存儲在一個地方,角色的特定信息的人。

相關問題