Database 使用MySQL垂直设计表

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

我有一个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      | 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
等等

但问题从这里开始。我想创建一个选项,您可以为以前添加的更新这些值。 但问题是,如果

  • 我在那个日期有什么安排吗
  • 如果已分配,如何确定并使用MySQL更新
  • 如果未分配,如何确定,并使用MySQL Insert Into进行分配
  • 我针对这个问题愚蠢且效率高50%的加载页面解决方案听起来是这样的(不要担心安全性,它只是一个模型):


    是的,我知道,这是一个无用的脚本,如果我再添加一个或数百个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