mysql数据库逻辑是否适合查询?

时间:2017-08-08 12:22:32

标签: mysql sql database database-design

我正在设计一个数据库,我想知道;

我可以通过查询回答这个问题吗,员工从这次培训中获得了多少技能?

这是一个很好的结构吗?

  • 每个部门花了多少钱
  • 每位员工获得多少技能
  • 每个部门获得多少技能
 id session_name    Skill         impact    sugg dept   function    training_value  training no
 1  PHP             Software        3       Sales       2           100usd          1   
 2  PHP             Software        3        Finance    2           100usd    1
 3  PHP             communication   2        Sales      2           100usd    1
 4  PHP             communication   2        Finance    2           100usd    1
 5  ASP             Software        4        Sales      2           200usd          2   
 6  ASP             Software        4        Finance    2           200usd    2
 7  ASP             database        1        Sales      2           200usd    2
 8  ASP             database        1        Finance    2           200usd    2


attended training table
id student_id  training_no
1  1           1
1  1           2


student table
id    name  department
1     John  1
2     Mary  2

department table
id  name
1   sales
2   finance 

最后,我需要为每个学生找到技能

john
software      7
communication 2
database      1

total spent 
john 300 usd

total spent by department
sales 300 usd

1 个答案:

答案 0 :(得分:3)

您的架构对我来说很合适。

但是,您应该考虑实体和关系。

您的实体似乎是培训,人员和部门。

你有许多人:人际关系:培训。非常好。 你有一个:很多部门的关系:人。这也很好。

看起来你想要某种培训关系:部门。我在这里猜测,但你的训练表中有一个sugg dept列。这应该与您的部门表有直接关系吗?

你真的需要一个名为“出席”的额外实体,而不仅仅是一个多对多关系的人:培训。你想记录一个人接受培训的时间吗?您想记录特定出勤费用的多少?如果有测验,他们会收到什么标记?

在这种情况下,您需要的关系是每个人的出勤率为零或者更多,每次出勤只有一次培训,每次培训都有零次或多次出勤。

我的观点:通过实体和关系进行思考的努力工作,结果将是一个很好的设计。

如果我可以换一种说法:你试图在数据库中捕捉现实世界的哪一部分?在您希望数据库存在的现实世界中有什么价值?在您的申请中......

  • 学生是人。它们本身就是有价值和持久的实体。
  • 培训代表了创建和展示它们的劳动力和成本。
  • 出勤代表学生的努力。
  • 部门可能会支付参加费用。它们肯定代表您应用中的电源中心。

现实世界的这个角落还有哪些有价值的物品?老师?经理人?场地(教室)?设备?顾客?

我的观点是,找出你的实体 - 价值项 - 以及它们之间的关系。然后编写表定义。