Mysql 构建调查数据库方案

Mysql 构建调查数据库方案,mysql,database,database-design,Mysql,Database,Database Design,我正在为一个调查系统建立一个数据库 我们有员工使用有问题的类别填写调查。员工可以给自己打分(例如6/10)。现在我们还有教练,他们将为该员工填写相同的测试 我创建了以下数据库方案,但我不确定布局。例如: 另一种方法是从员工那里获取答案表中的coach_id,因为我将使用角色来检查某个员工是否是教练 实体 客户(或公司)指派了员工。客户(公司)的所有员工都必须进行扫描(调查) 用户是通用的可登录实体,他们有用户名、密码和角色 有两个角色员工和教练,教练可以为某些员工填写调查,因此我们有员工和

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

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

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

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

实体
  • 客户(或公司)指派了员工。客户(公司)的所有员工都必须进行扫描(调查)
  • 用户是通用的可登录实体,他们有用户名、密码和角色
  • 有两个角色员工教练,教练可以为某些员工填写调查,因此我们有员工和教练的分数
  • 一个类别有很多问题
  • 回答(见下面的示例)
  • 扫描是一个类别和问题的集合,因此一个客户(公司)多年来可以进行多次扫描
答案示例表 教练 我有一些用户是教练,因此,当在答案表中填写教练id时,我们假设教练填写了此报告。我不确定这是不是解决问题的方法

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


谢谢你抽出时间

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


在设计模式时,您需要注意将要对数据施加的规则,但这只是因为您需要使执行这些规则成为可能。您主要关心的应该是尽可能优雅合理地表达底层结构:在这里,您有用户。他们中的一些人只能以自己的身份填写调查。其他人可能会为任何用户填写调查,也可能是任何不属于自己角色的用户;我不清楚这一点,但不管怎样,这都是一项业务规则,而不是结构上的差异,所以区别真的不重要。

如果教练是用户,员工是用户,就不要把他们分开。让您的结构允许任何用户为任何其他用户填写调查,并确保只有具有coach角色的用户才有权为其他用户单独填写调查。谢谢您的回答,这样您就可以摆脱employees表了吗?并从答案表链接2次到用户表?是。如果所有员工都是用户,那么单独的表不会添加任何内容,只会给您带来不便,因为您需要将一个额外的对象加入到查询中。你所要做的就是将你的answers.employee\u id和answers.coach\u id外键指向users表。这就是我一直在寻找的答案!如果你想让它成为一个真正的答案,我会接受!还有一个问题!:)现在如何将用户链接到客户端?员工属于客户,但如果我把那张桌子处理掉。。我是否将客户端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      |
+------------+------------+---------+-----------+