两个表具有不同的目的但相同的属性/字段

时间:2016-12-16 13:05:56

标签: database database-design

我正在研究一个有两种实体的学校管理系统。

User
-----
UserId
UserType
Name
ContactNumber
Address

其中包含所有出席的学生/教师。

另一张表是

ContactDetails
----
ContactId
Name
ContactNumber
Address

ContactDetails会显示用户父母和亲属的信息(通过具有多对多映射的映射表),并且不会标记他们的出勤率。

我已经有一个aspnetUsers表,其中存储了所有凭据。

现在的变化是,作为联系人的父母(而不是亲戚)需要登录系统并更新数据。

它有两种方法。

  1. 创建一个Usertype = Parent,删除表联系人并重新映射所有关系。 登录系统只会查看用户表以获取身份验证后的详细信息。

  2. 在aspNetRoles中创建父级角色,当role = parent时,根据信息角色查看“用户”或“联系人”。

  3. 是否需要将两个具有不同目的但相同字段的不同实体放在不同的表中?

1 个答案:

答案 0 :(得分:2)

类似的属性应该是一个提示。你得到的是一个设置不同角色的实体。同一个人既可以是老师也可以是父母?学生以后可以成为老师或家长吗?

许多系统开始将各种类别的人作为不同的实体集处理,当需要应用相同的更改并且在多个表上运行相同的查询时,这最终会导致重复工作。在填充数据库之后将不同的实体集统一为一个超类型至少是一项耗时的任务,并且可能很困难。如果从一开始就可以内置这些概括,那就更好了。

我建议如下:

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

这样,所有人的个人信息都存储在一个地方,并且人的角色特定信息可以记录在任何相关的子类型表中。