【问题标题】:Two Tables with different purpose but same attributes / fields两个用途不同但属性/字段相同的表
【发布时间】:2016-12-18 01:04:58
【问题描述】:

我正在开发一个具有两种类型实体的学校管理系统。

User
-----
UserId
UserType
Name
ContactNumber
Address

其中包含所有已标记出勤的学生/教师。

另一张桌子是

ContactDetails
----
ContactId
Name
ContactNumber
Address

ContactDetails 存储用户的父母和亲属的信息(通过具有多对多映射的映射表)并且他们的出勤没有标记。

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

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

有两种方法。

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

  2. 在 aspNetRoles 中创建父级角色,当角色=父级时,然后根据角色在用户或联系人中查找信息。

两个具有不同用途但相同字段的不同实体是否需要位于不同的表中?

【问题讨论】:

    标签: database database-design


    【解决方案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, ...)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-08
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多