我正在设计一个数据库,我想知道;
我可以通过查询回答这个问题吗,员工从这次培训中获得了多少技能?
这是一个很好的结构吗?
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
答案 0 :(得分:3)
您的架构对我来说很合适。
但是,您应该考虑实体和关系。
您的实体似乎是培训,人员和部门。
你有许多人:人际关系:培训。非常好。 你有一个:很多部门的关系:人。这也很好。
看起来你想要某种培训关系:部门。我在这里猜测,但你的训练表中有一个sugg dept
列。这应该与您的部门表有直接关系吗?
你真的需要一个名为“出席”的额外实体,而不仅仅是一个多对多关系的人:培训。你想记录一个人接受培训的时间吗?您想记录特定出勤费用的多少?如果有测验,他们会收到什么标记?
在这种情况下,您需要的关系是每个人的出勤率为零或者更多,每次出勤只有一次培训,每次培训都有零次或多次出勤。
我的观点:通过实体和关系进行思考的努力工作,结果将是一个很好的设计。
如果我可以换一种说法:你试图在数据库中捕捉现实世界的哪一部分?在您希望数据库存在的现实世界中有什么价值?在您的申请中......
现实世界的这个角落还有哪些有价值的物品?老师?经理人?场地(教室)?设备?顾客?
我的观点是,找出你的实体 - 价值项 - 以及它们之间的关系。然后编写表定义。