【问题标题】:Structuring a Survey Database scheme构建调查数据库方案
【发布时间】:2017-04-23 22:59:45
【问题描述】:

我正在为调查系统构建一个数据库。

我们有员工使用有问题的类别填写调查表。员工可以给他/她自己打分(例如 6/10)。现在我们还有教练会为该员工填写相同的测试。

我创建了以下数据库方案,但我不确定布局。例如:

另一种方法是从员工那里获取答案表中的coach_id,因为无论如何我都会使用角色来检查某个员工是否是教练..

实体

  • 客户(或公司)有员工分配给他们。客户(公司)的所有员工都必须进行扫描(调查)
  • 用户是一般的可登录实体,他们有用户名、密码和角色
  • 员工教练两个角色,教练可以为特定员工填写调查表,所以我们有员工和教练的分数。
  • 一个类别有很多问题
  • 回答(见下方示例)
  • 扫描是类别和问题的集合,因此一个客户(公司)多年来可以进行多次扫描。

答案示例表

+------------+------------+---------+-----------+
| EmployeeID | QuestionID | CoachID | Answer    |
+------------+------------+---------+-----------+
|          1 |         10 | null    | 5/10      |
|          2 |         11 | null    | 8/10      |
|          3 |         12 | null    | 6/10      |
|          1 |         10 | 1       | 5/10      |
|          2 |         11 | 1       | 8/10      |
|          3 |         12 | 1       | 6/10      |
+------------+------------+---------+-----------+

教练

我有一些用户教练,因此当在答案表中填写coach_id 时,我们假定教练填写了此报告。我不确定这是解决方法吗?

员工

我正在使用员工表,他们是一种用户。但对于教练,我没有使用不同的模型。我应该这样做吗?因为教练也像员工,但角色不同。我对所有事情都使用角色,但我只是想知道是否需要这些员工/教练表?

感谢您的宝贵时间!

【问题讨论】:

  • 如果教练是用户,员工是用户,那么根本不要把他们分开。让您的结构允许任何用户为任何其他用户填写调查表,并确保只有具有指导角色的用户才能分别为其他用户填写调查表。
  • 感谢您的回答,所以您会摆脱员工表吗?并从 answers 表链接 2 次到 users 表?
  • 是的。如果所有员工都是用户,则单独的表不会添加任何内容,除了必须将额外对象加入查询中带来的不便。您所要做的就是将您的 answers.employee_id 和 answers.coach_id 外键指向用户表。
  • 这就是我一直在寻找的答案!如果你想让它成为一个真正的答案,我会接受!
  • 还有一个问题! :) 我现在如何将用户链接到客户端?员工属于客户,但如果我摆脱那张表..我是否将 client_id 添加到用户?可以为空,还是再添加一张表?谢谢!

标签: mysql database database-design


【解决方案1】:

您的数据模型不需要完美地封装您的所有业务逻辑,事实上它通常既不能也不应该。这不仅是因为业务逻辑通过作用于已经结构化的数据来工作,还因为它可能会发生变化:如果员工突然需要能够使用调查来评价教练,您的应用程序必须处理它,如果您已经将权限模型烘焙到您的架构中,那么您正在查看对系统最基本级别的重大修订。不是个好地方。

在设计架构时,您需要注意要对数据施加的规则,但前提是您需要使它们能够执行。您的主要关注点应该是尽可能优雅地表达底层结构:在这里,您有用户。他们中的一些人只能以自己的身份填写调查表。其他人可能会为任何用户填写调查,或者可能是任何不属于他们自己角色的用户;我不清楚,但无论哪种方式,这是一个业务规则,而不是结构上的差异,所以区别真的无关紧要。

【讨论】:

  • 感谢您的回答。连接用户表两次是有意义的。但我不太明白你答案的另一部分。我的方案还有其他问题吗?感谢您的宝贵时间
  • 这是一个更普遍的原则。对我来说唯一突出的其他事情是您的架构在角色和 user_has_roles 之间没有明确的关系;并且数据库可能不是存储翻译的最佳位置,但这取决于您的具体需求。
猜你喜欢
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
相关资源
最近更新 更多