Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database design 带“的下拉列表”;其他";选项_Database Design_User Experience - Fatal编程技术网

Database design 带“的下拉列表”;其他";选项

Database design 带“的下拉列表”;其他";选项,database-design,user-experience,Database Design,User Experience,每次我得到一个规范,要求下拉菜单中有一个“Other(specify below)”选项时,我都会呻吟,因为它们太难实现了 在数据库中存储此信息的最佳方式是什么?是否最好使用两个字段,一个是不同表中值的整数外键(包括“其他”),另一个是字符串字段以存储选择的“其他”值?或者干脆将所选选项存储为字符串(这也使得从数据库中提取值变得更容易) 界面方面,如果选择了“Other”(可能通过一些jQuery黑客),您是使用常规的并弹出一个隐藏的,还是使用某种combox小部件?的“过滤”版本是我发现的最用

每次我得到一个规范,要求下拉菜单中有一个“Other(specify below)”选项时,我都会呻吟,因为它们太难实现了

  • 在数据库中存储此信息的最佳方式是什么?是否最好使用两个字段,一个是不同表中值的整数外键(包括“其他”),另一个是字符串字段以存储选择的“其他”值?或者干脆将所选选项存储为字符串(这也使得从数据库中提取值变得更容易)
  • 界面方面,如果选择了“Other”(可能通过一些jQuery黑客),您是使用常规的
    并弹出一个隐藏的
    ,还是使用某种combox小部件?的“过滤”版本是我发现的最用户友好的版本,但是实现看起来不是很好(2000行,并且有bug)

  • 例如,假设我有一个名为
    vehicles
    的表。它列出了在我的网站上注册的所有车辆。它包含诸如年、品牌、型号、里程等内容

    假设我有另一张表格,上面有所有品牌供用户选择:本田、丰田、宝马等

    但是我的“makes”表可能不是最新的,所以如果没有列出,我希望允许用户输入他们自己的表。在这种情况下,他们会从下拉列表中选择“其他品牌”,然后手动输入品牌

    您将如何在
    车辆
    表中表示这一点

    a。作为一个字段,
    make
    ,它可能是
    varchar(255)
    。i、 例如,如果他们选择了一个现有品牌,则只需将其复制到此字段中
    B作为两个字段:
    make\u id
    make\u other
    。第一个按住
    键可生成
    表,第二个仅在选择“其他”时填写


    显示/隐藏“其他”文本框的jQuery解决方案:


    只需将
    data other=“1”
    添加到“other(请指定)”
    。假设您的输入在
    中布局--修改其他布局。

    出于以下原因,我更倾向于选择将信息存储在数据库中:

    • 我最好把所有数据都保存在数据库里
    • 大多数情况下,客户会要求更改这些信息,实际上他们会要求一些屏幕来允许他们更改(添加、删除、更新)这些信息
    • 在系统启动时将大部分(如果不是全部)信息加载到缓存中是一项简单的任务,因此我不需要调用数据库来加载所有数据
    至于如何存储在数据库中,我更喜欢外文列技术,因为两个原因,我不会使用第二列来存储值

    • 首先,大多数时候我都会在缓存中加载
      Other
      表,所以我不担心数据库性能问题
    • 对于客户希望更新
      其他
      表值的场景,我不必传递存储值的所有表并对其进行更改

    在某些情况下,我不介意对
    其他
    表使用
    字符串
    主键,因此我会直接存储该值,并保留
    其他
    表用于描述和任何相关信息。因为在大多数情况下,与系统中的核心表(员工、用户、购物车、产品等)相比,表的大小非常小。但是,我应该保证字符串值很少更新(例如国家/地区表)。

    出于以下原因,我更倾向于首选将信息存储在数据库中:

    • 我最好把所有数据都保存在数据库里
    • 大多数情况下,客户会要求更改这些信息,实际上他们会要求一些屏幕来允许他们更改(添加、删除、更新)这些信息
    • 在系统启动时将大部分(如果不是全部)信息加载到缓存中是一项简单的任务,因此我不需要调用数据库来加载所有数据
    至于如何存储在数据库中,我更喜欢外文列技术,因为两个原因,我不会使用第二列来存储值

    • 首先,大多数时候我都会在缓存中加载
      Other
      表,所以我不担心数据库性能问题
    • 对于客户希望更新
      其他
      表值的场景,我不必传递存储值的所有表并对其进行更改

    在某些情况下,我不介意对
    其他
    表使用
    字符串
    主键,因此我会直接存储该值,并保留
    其他
    表用于描述和任何相关信息。因为在大多数情况下,与系统中的核心表(员工、用户、购物车、产品等)相比,表的大小非常小。但是,我应该保证字符串值很少更新(例如countries表)。

    问题不在于是否将其存储在DB中,而在于如何将其存储在DB中。您是否使用一个或两个字段来记录所选选项?您的更新不清楚。我将用一个更具体的例子来更新这个bug,这样你就知道我在说什么了。问题不在于是否将它存储在DB中,而在于如何将它存储在DB中。您是否使用一个或两个字段来记录所选选项?您的更新不清楚。我会用一个更具体的例子来更新这个bug,这样你就知道我在说什么了。
    $('select>option').filter(function() {
        return !!$(this).data('other');
    }).each(function() {
        $(this).closest('div.row').next().toggle($(this).is(':selected'));
        $(this).parent().on('change', function() {
            if($(':selected',this).data('other')) {
                $(this).closest('div.row').next().show().find('input').focus();
            } else {
                $(this).closest('div.row').next().hide().find('input').val('');
            }
        });
    });