繁体   English   中英

使用复选框时,我应该使用序列化数组还是单独的数据库表?

[英]When working with tick-boxes, should I use a serialized array or a separate database table?

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

数据库结构如下所示:

数据库结构

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

在上图中,我使用VARCHAR来允许serialize 'd数组。

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

这里有两个问题;

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

提前致谢,

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

查询示例:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM