1

我正在为我工​​作的学校编写一个课程观察系统。

数据库结构如下所示:

数据库结构

我目前正在为表格开发输入表单,其中Observations很多字段都需要勾选框。例如,该Focus字段可以是任意数量的十二个选项;PositiveandNegative字段可以是任意数量的近二十个选项。

在上图中,我曾经VARCHAR允许一个serialize'd 数组。

但是,我开始怀疑这是否是最好的下降路线,特别是考虑到我可能想要对数据进行一些半复杂的分析,例如top 5 staff for a specific positive attribute such as behaviour(这将涉及计算behaviour每个员工所拥有的属性数量表中的Positive字段Observations)。

这里有两个问题;

  • 我应该使用额外的桌子吗?因为Focus我想第一个表有三个字段 - ID(键和自动增量)Observation_IDFocus_ID. 将Focus_ID与另一个名为的表focii或仅具有两个字段的表相关联 -Focus_IDTitle. 我需要两个表Focus和三个表Positive/ Development(相同的选项但不同的日志记录)。
  • 如果我使用这些额外的数据库表,我的 SQL 语句在尝试从Observations表中检索信息时会是什么样子,包括所有关联的focuses,positivesdevelopments

提前致谢,

4

1 回答 1

3

是的,在这种情况下,您应该始终正常化。如果你想做计算甚至修改,存储序列化数据是地狱般的。(你将如何删除第三个元素?)

查询示例:

SELECT 
    o.id, 
    COUNT(f.id) AS number_of_focusses 
FROM 
    observations o 
INNER JOIN focuses f 
    ON f.observation_id = o.id 
GROUP BY id

这将为您提供属于每个观察的“焦点记录”的数量。

于 2012-09-17T10:29:00.230 回答