Database 使用MySQL垂直设计表
我有一个html表单(根据日期,每个表单有不同的页面),有五个文本输入,称为日期、inp1、inp2、inp3和inp4 例如,我有一个数据库表,其结构如下:Database 使用MySQL垂直设计表,database,Database,我有一个html表单(根据日期,每个表单有不同的页面),有五个文本输入,称为日期、inp1、inp2、inp3和inp4 例如,我有一个数据库表,其结构如下:id | parent | name | value。 在这种情况下,我希望存储数据,并按父级将其添加到date,如下所示: id | parent | name | value 1 | 0 | date | 20.07.2011 2 | 1 | inp1 | value-from-inp1 3 | 1
id | parent | name | value
。
在这种情况下,我希望存储数据,并按父级将其添加到date,如下所示:
id | parent | name | value
1 | 0 | date | 20.07.2011
2 | 1 | inp1 | value-from-inp1
3 | 1 | inp2 | value-from-inp2
4 | 0 | date | 21.07.2011
5 | 4 | inp2 | value-from-inp2
6 | 1 | inp3 | value-from-inp3
7 | 4 | inp1 | value-from-inp1
等等
但问题从这里开始。我想创建一个选项,您可以为以前添加的更新这些值。
但问题是,如果
是的,我知道,这是一个无用的脚本,如果我再添加一个或数百个INP,它将是压碎测试站点,100%保证超时,而不是工作脚本。RobertR我同意Kerrek这是一个非常糟糕的主意!你应该规范化你的数据。这种结构没有提供任何真正的数据库优势,试图根据“模式”解析和维护数据将是痛苦的
总有一种形式。如果您需要维护用户定义的数据,那么请使用通用数据库列,如[FIELD_NAME][FIELD_TEXT_VALUE]和[FIELD_NAME][FIELD_DATE_VALUE],其中所有列都是原子的。我觉得您好像在尝试使用一个单表,而实际上需要两个。要回答您的问题,因为日期与值是分开存储的,所以无法使用单个
选择来确定是否为特定问题指定了值。您可以使用嵌套选择来实现这一点,但我不会尝试通过扭曲来实现这一点
考虑这种替代设计,它假设给定的字段不能为给定的提交重复:
提交表
submission_id | date
1 | 20.07.2011
2 | 21.07.2011
答案表
submission_id | field_name | field_value
1 | inp1 | value-from-inp1
1 | inp2 | value-from-inp2
2 | inp2 | value-from-inp2
2 | inp4 | value-from-inp4
1 | inp3 | value-from-inp3
请注意,Randolf Rincón-Fadul提出的用字段分隔数据类型的建议是很好的,但我在这里并不是为了简单起见。现在,您可以通过加入表来确定是否有特定日期的答案。我建议您规范化数据库。让一列(值
)的类型依赖于另一列(名称
)是不好的。我知道,也许这种类型的数据库不适合这个时候,但我在不久的将来表明,我需要使用这种类型。例如,用户创建的表单和不同的名称,这在水平类型的数据库中是不可能的。我理解您的名称和值列在您的注释后表示什么,但什么是父项?父项是指,它与id列链接,并获取日期和其他内容,如果需要(本例中不是这样),所以,在这个例子中,你是说有一个表单是在2011年7月20日提交的,其值为inp1=value-from-inp1和inp2=value-from-inp2?实际上,这是实现“标签”的一种方式+为了简单起见,好吧,也许我应该把它标准化为水平。但在这种情况下,我脑海中的下一个项目是一些东西,如果没有垂直设计,它完全无法工作。所以,我只是期待,从这个例子开始:)好的,现在我明白了:)谢谢你的解释。
submission_id | field_name | field_value
1 | inp1 | value-from-inp1
1 | inp2 | value-from-inp2
2 | inp2 | value-from-inp2
2 | inp4 | value-from-inp4
1 | inp3 | value-from-inp3