Database design 应用单表继承

Database design 应用单表继承,database-design,single-table-inheritance,Database Design,Single Table Inheritance,问题: 总结: 我的缺点是:客户、员工和分支机构 Customers和Employees与一名人员、一名个人(与人员本身相关的字段)和一名用户(用于登录目的)相关联。因此,个人s和用户s始终与一个客户或员工人相关 分支机构与一个人员和一个公司(与公司人员相关的字段)关联。因此,公司始终与一个分支机构人员相关。他们没有用户,因为他们隶属于该数据库所代表的公司——是他们的员工可以在应用程序中进行身份验证 员工属于一个分支机构。一个分支机构有零名或多名员工s。(是的,图表不正确,对不起!) 目前,

问题:

总结:

  • 我的缺点是:客户、员工和分支机构
  • Customer
    s和
    Employee
    s与一名
    人员
    、一名
    个人
    (与人员本身相关的字段)和一名
    用户
    (用于登录目的)相关联。因此,
    个人
    s和
    用户
    s始终与一个
    客户
    员工
    人相关
  • 分支机构
    与一个
    人员
    和一个
    公司
    (与公司人员相关的字段)关联。因此,
    公司
    始终与一个
    分支机构
    人员相关。他们没有用户,因为他们隶属于该数据库所代表的公司——是他们的员工可以在应用程序中进行身份验证
  • 员工
    属于一个
    分支机构
    。一个
    分支机构
    有零名或多名
    员工
    s。(是的,图表不正确,对不起!)
  • 目前,我正在使用一个位来区分员工角色-我有拥有运营和管理权限的员工。角色权限包含在代码本身中,在这里您可以意识到客户也有自己的角色。。。有没有建议实施更好(更简单)的方式来管理客户和员工的角色
我应该如何改变错误的3NF结构,以实现设计良好的单表继承,从而更好地使用MVC模式

我试图简化一点,现在我完成了这个新结构:


我还能改进吗?哪里您将如何对此进行建模?

只有当您具有正常的低基数(更少的唯一/更多的重复)时,才值得为城市创建一个新表。因此,根据您的用户,您必须自行决定。另一方面,您可以分离地址表和电话号码表

根据您存储的有关员工和客户的信息类型,您可以只使用一个字段来指示此人(如果是员工或客户)是否可以有两个单独的表

如果我们谈论角色,它们通常表示员工的权限/职位/可访问性。即常规、P/T、经理。您可以为每个组/角色开发内容的访问级别和可见性

从Person中取出所有个人详细信息并将其存储在新表中。(只是好奇..你真的需要
昵称
字段吗?磁盘I/O是任何应用程序的最大瓶颈之一)将个人详细信息与专业详细信息和ID分开

说到分支机构,您确定在任何时候只有一个联系人吗?通常情况下,商业世界并非如此。但是一个分支机构/个人在任何给定的时间都只有一个地址,所以这里单独的地址表会很有帮助

一般来说,很难提出一个结构。好的设计总是基于业务规则