两张表具有不同的用途,但具有相同的属性/字段
问题描述:
我正在研究具有两种类型的实体的学校管理系统。两张表具有不同的用途,但具有相同的属性/字段
User
-----
UserId
UserType
Name
ContactNumber
Address
它保存所有学生/老师的出席标记。
另一表是
ContactDetails
----
ContactId
Name
ContactNumber
Address
ContactDetails strores父母和用户的亲属的信息(经由具有多对多映射映射表)和他们的出席未被标记。
我已经有一个aspnetUsers表,其中存储了所有凭据。
现在的变化是,联系人的父母(不是亲属)需要登录到系统并更新数据。
有两种方法。
创建一个Usertype = Parent,删除表联系人并重新映射所有关系。 登录系统只会查看用户表以获得身份验证后的详细信息。
在aspNetRoles中创建父项的角色,当role = parent时,根据信息角色查找User或Contacts。
是否需要将两个不同目的但字段相同的不同实体放在不同的表中?
答
相似的属性应该是一个提示。你有什么是一个实体设置在不同的角色。同一个人既可以是老师也可以是父母?学生以后可以成为老师还是家长?
许多系统开始将不同类别的人处理为不同的实体集,当需要应用相同的更改并在多个表上运行相同的查询时,这些系统最终导致工作重复。填充数据库后将不同的实体集统一为一个超类型至少是一项耗时的任务,并且可能很困难。如果这些概括可以从一开始就内置,那就好多了。
我建议像下面这样:可以记录在相关的亚型表
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, ...)
这样一来,所有的人的个人信息存储在一个地方,角色的特定信息的人。