【问题标题】:Storing table references in text field (for Agile Toolkit)在文本字段中存储表引用(用于 Agile Toolkit)
【发布时间】:2011-09-13 19:10:37
【问题描述】:

我最近一直在尝试 RDB 设计,我想知道将项目存储在一个可以有多个值的字段中:

    CARS        Color_avail
  1  corvette    1, 2, 3        <<<<<<<
  2  ferrari      2
  3  civic        1


    COLORS 
  1  red
  2  White 
  3  black 

所以在 CRUD 上,我想通过下拉/复选框或包含多个值的东西添加多个项目。

【问题讨论】:

    标签: php user-interface frameworks atk4


    【解决方案1】:

    我可以看到在表单中显示这样的输出的好处,但是你真的想这样将它存储在数据库中吗?

    例如,对于一个包含逗号分隔列表的数据模型,如您的示例所示,您将使用什么 SQL 来识别所有可用的白色汽车?

    保持这种多对多关系的传统方法是使用附加表,例如你有一个单独的表,其中包含以下内容的 CAR_COLOUR

     CAR      COLOUR
     1        1
     1        2
     1        3
     2        2
     3        1
    

    所以现在您可以轻松查询诸如获取所有汽车和颜色的列表

    SELECT CAR, COLOUR
      FROM CARS CA, 
           COLOUR COL, 
           CAR_COLOUR CACOL
     WHERE CA.CAR=CACOL.CAR
       AND CACOL.COL=COL.COLOUR
    

    或者,如果您只想要白色汽车,请将以下内容添加到 WHERE 子句中

       AND COL.COLOUR='White'
    

    id 字段和 CAR_COLOUR 中的两个字段上的索引意味着即使您有数千行也可以获得出色的性能,而将它们全部放在逗号分隔的列表中的单个字段中意味着您必须使用 substr 或类似这将阻止索引的使用,并意味着随着数据量的增长,性能将迅速下降。

    【讨论】:

    • 虽然我同意逗号分隔值会降低数据库性能。但这可能是在聚合或过滤条件级别上。但如果逗号分隔值字段是在每个记录级别上处理的,那么它是一个实际的选择,因为它是该记录所独有的,并且不依赖于其他记录。
    【解决方案2】:

    在逗号分隔的列表中存储关系在某些意义上是有意义的。不过,您不需要逗号。有 2 个现有控件可以帮助您。

    在表单中显示带有复选框的值列表

    $form->addField('CheckboxList','corvette')->setValueList($array);
    

    (您可以通过 $model->getRows() 填充数组,尽管我认为它需要是关联的。您可以使用 var_dump 和 foreach 加入它们)。

    您的其他选择是使用带有可选网格的隐藏字段

    $field = $form->addField('line','selection');
    $grid = $form->add('MVCGrid');
    $grid->setModel('Colors',array('name'));
    $grid->addSelectable($field);
    
    $form->addSubmit();
    

    要隐藏实际字段,您可以使用“hidden”而不是“line”或使用 JavaScript 隐藏它:

    $field->js(true)->hide();
    

    $field->js(true)->closest('dl')->hide();
    

    如果您还需要在字段周围隐藏标记。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-20
      • 2012-07-19
      • 2013-12-31
      • 2013-05-11
      • 2017-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多