我的复选框数据在数据库中存储的正常程度

时间:2009-12-30 22:27:01

标签: mysql database-design ms-access

我有一个包含大约15个复选框的网络表单,用户可以检查0或所有15个复选框以及其间的任何数量。将存储表单数据的数据库是MySQL,但是将使用MySQL ODBC连接从MS Access中的数据生成报告。我看到了处理这个的三种选择。

电子表格方式:

每个复选框都有一个带布尔列的表,“其他”

有一个文本框

规范化方式:

有两个表,一个表格数据,然后是复选框信息。然后是第二个表,其中包含表单数据的FK和一对多关系中的复选框的值。在处理表单时,处理与插入表单数据分开的复选框值,并进行一些循环。

简短方法:

有一个表格,其中包含复选框数据的文本字段。处理表单时,将复选框值连接成逗号分隔的字符串,并将其与其他数据一起放在文本字段中。


Access方式和Short方式都很诱人,因为它们可以轻松地用于生成报告,特别是短路方式。不幸的是,虽然我更喜欢规范化的方式,但我的组织中没有人开发Access部件知道如何生成正确使用规范化数据的报告,至少不是干净利落的。当按复选框值进行过滤时,Access方式和Short方式都会出现问题(访问方式更多)。

我该如何处理?如果我采用规范化的方式,我还必须负责开发一个生成报告的工具,这可能会踩到几个脚趾并且有点政治争吵。我坚持他们已经使用的东西(访问方式)增加了我的直接工作量并为自己买了一大堆编程问题,但避免任何办公室政治。或者现在花费一些编程的混合方式以及稍后的一些烦恼,在其他项目成员中只有一些障碍?

3 个答案:

答案 0 :(得分:2)

我不同意你所说的“访问方式”没有规范化。只要所有复选框具有不同的含义,并且仅依赖于键(而不是彼此),表就会被规范化(至少为3NF或BCNF)。

换句话说,如果你没有看到任何有关该结构报告的麻烦,请继续,Codd不会在睡梦中困扰你。 (甚至Date也可能会这样,只要你不将“off”复选框存储为NULL:p)

答案 1 :(得分:0)

如果真/假值是与PK直接相关的离散数据,那么您可以将它们放在与它们所针对的实体相同的表中。

如果你想将它分成另一张表,那就没问题了。只需选择一个列即可。通过添加或删除列,将来很容易扩展或删除。

我不推荐使用逗号分隔值列表,因为这不是可维护的,会导致混淆。

答案 2 :(得分:0)

设计要以标准化形式捕获的数据。

在Access数据库中,构建一个交叉表查询,该查询将以您描述的格式显示它,每个复选框数据项都有一个单独的列。将该交叉表查询用作查看报表数据的人员进行选择的视图。

您可以充分利用这两个世界,但要花费一些时间来执行交叉表查询。如果这种延迟变得过于激烈,可以考虑快照。