应用单表继承

时间:2012-10-03 13:19:12

标签: database-design single-table-inheritance

来自that问题:

database structure

汇总:

  • 我的CRUD是:客户,员工和分支机构。
  • CustomerEmployee与一个Person,一个Individual(与此人相关的字段)和一个User相关联(用于登录)目的)。因此,IndividualUser始终与一个CustomerEmployee人相关。
  • Branch es与一个Person和一个Company相关联(与公司人员相关的字段)。因此Company始终与一个Branch人相关。他们没有用户,因为他们与该数据库所代表的公司有关联 - 他们的员工可以在应用程序中进行身份验证。
  • Employee属于一个BranchBranch的{​​{1}}为零或多个Employee(是的,图表不正确,抱歉!)
  • 目前我正在使用一位来区分Employee角色 - 我的员工拥有运营和管理权限。角色权限在代码本身中,在这里您可以意识到客户也有自己的角色......有任何建议可以实现更好(和简单)的方式来管理客户和员工的角色吗?

如何更改错误的 3NF结构以实现精心设计的单表继承以更好地使用MVC模式?

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

new database structure

我还能改进它吗?哪里?你会如何模仿?

1 个答案:

答案 0 :(得分:0)

如果您具有正常低基数(更少的唯一/更多重复),则仅为城市创建新表是值得的。因此,根据您的用户,您必须自己决定。另一方面,您可以打破地址表和电话号码表。

根据您存储的有关员工和客户的信息类型,您可以只显示一个字段,指明该人员是员工还是客户,还是可以有两个单独的表格。

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

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

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

一般来说建议一个结构真的很难。好的设计总是基于业务规则。