【问题标题】:Multiple values in a single mysql field [closed]单个mysql字段中的多个值[关闭]
【发布时间】:2015-08-17 19:57:58
【问题描述】:

我正在构建一个 mysql 数据库来存储公司信息。在其中一个字段中,我需要存储多个值,例如创始人的姓名。

我知道这不是一个好的选择,但它可以避免创建另一个表来存储一些名称。

我关心的是关于检索和查询该特定字段的值的问题。

非常感谢您的意见,即使需要更多代码行,我也可以做出不错的选择。

TIA

【问题讨论】:

  • 嗯,你知道正确的答案,但不愿意以正确的方式去做。为什么有人要尝试回答?
  • 创建另一个表。当您的数据以适当的方式标准化后,您会发现其他用途和好处。
  • 这叫归一化,习惯吧!
  • 我知道正确的答案是规范化,但我也知道有些例外情况有时更有效。如果您可以将其存储在单个字段中,为什么还要为某些名称和其他信息创建第二个表?听听别人的经验没问题...
  • 我推荐Bill Karwin的书SQL Antipatterns http://www.amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers/dp/1934356557在一列中存储多个值是本书的第2章。 (截至目前,您可以在亚马逊“Look inside”预览中阅读第 2 章。)

标签: php mysql sql database web


【解决方案1】:

三个表: 公司,(一般信息公司) CompanyFounders,(与公司相关的创始人) 创始人。 (创始人姓名)

如果您想以正确的方式做事,请习惯于编写大量代码。

【讨论】:

    【解决方案2】:

    好吧,只要以正确的方式去做。 创建表的工作量并不大,如果您愿意为更差的解决方案编写更多代码行,为什么不将精力投入到好的解决方案中。

    您是否有理由不想在这方面对您的数据库进行规范化?

    【讨论】:

      【解决方案3】:

      您知道在一个列中存储多个值时会出现问题,因此您不应该这样做。保持数据库规范化,您在检索和处理数据时遇到的问题就会少得多。

      更多信息:http://en.wikipedia.org/wiki/Database_normalization

      对于您的示例,您应该使用三个表companies、persons、founder,而founder 将companies 和persons 的主键链接在一起。

      编辑:SQLfiddle 目前似乎有一些问题,所以我无法为您提供,但这里有一个示例代码:com1 有一个创始人,com2 有三个。

      create table companies (id, name);
      
      insert into companies (id, name) values (1, 'com1');
      insert into companies (id, name) values (2, 'com2');
      
      create table persons (id, name);
      insert into persons (id, name) values (1, 'person1');
      insert into persons (id, name) values (2, 'person2');
      insert into persons (id, name) values (3, 'person3');
      insert into persons (id, name) values (4, 'person4');
      
      create table founders (company_id, person_id);
      
      insert into founders (company_id, person_id) values (1,1);
      insert into founders (company_id, person_id) values (2,2);
      insert into founders (company_id, person_id) values (2,3);
      insert into founders (company_id, person_id) values (2,4);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-15
        • 1970-01-01
        • 1970-01-01
        • 2019-11-25
        • 2011-06-07
        • 1970-01-01
        • 2013-10-08
        相关资源
        最近更新 更多