Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/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
Mysql 每个字段可以有多个值_Mysql_Sql_Database_Erd - Fatal编程技术网

Mysql 每个字段可以有多个值

Mysql 每个字段可以有多个值,mysql,sql,database,erd,Mysql,Sql,Database,Erd,我被要求允许用户在每个字段中输入多个值。因此,选择是无限的 比如说。栏目包括: 公司ID- 公司名称 网站 主要市场 并购史 集锦 区域 评论 一种情况是,一家公司可以有多个网站、关键市场、区域和蚀刻。我该如何在专业上做到这一点?我想把每一列都放在一张单独的表格里 您需要一个数据库结构,如: table_master_companies - record_id - company_name table_websites - record_id - company_id

我被要求允许用户在每个字段中输入多个值。因此,选择是无限的

比如说。栏目包括: 公司ID- 公司名称 网站 主要市场 并购史 集锦 区域 评论


一种情况是,一家公司可以有多个网站、关键市场、区域和蚀刻。我该如何在专业上做到这一点?我想把每一列都放在一张单独的表格里

您需要一个数据库结构,如:

table_master_companies
   - record_id
   - company_name

table_websites
   - record_id
   - company_id
   - website_address

table_key_markets
   - record_id
   - company_id
   - key_market

然后需要使用连接将所有信息合并到一个记录集中。

基本上有三种方法来实现这一点

1) 将多个字段分别写入一列。这将是一个非常糟糕的设计,您必须在应用程序中处理拆分-不要这样做;-)

2) 使用一个表和多个组来存储数据。这对于参数来说是有意义的,但如果每个客户的值不同,就没有意义了。例如:

  • 公司ID
  • GroupID
  • 位置
  • 价值观
例如:

108001, 'homepage', 1, 'www.mypage.com';
108001, 'homepage', 2, 'www.mysecondpage.com';
108001, 'homepage', 3, 'www.anotherpage.com';
108001, 'markets', 1, 'erp';
108001, 'markets', 2, 'software';
108001, 'region', 1, 'germany';
108001, 'region', 2, 'austria';
108001, 'region', 3, 'poland';
3) 为每个1:n关系使用单独的表!我想这将是满足您需求的最佳解决方案。这样做的好处是,您可以轻松地扩展模式并在其中存储更多数据。例如,如果您决定存储每个地区或关键市场的用户数量等


另一点:使用n:m关系避免数据库中出现双重内容!例如,关键市场和地区应该存储在一个完全分离的表中,而客户和关键市场的ID应该存储在交叉表中。因此,您不需要将关键市场存储为每个客户的字符串

欢迎来到堆栈溢出。首先,请正确标记您的问题,是mysql还是sql server 2008R2,而不是两者。在这种特殊情况下,当您询问可能的数据库设计时,可能不是很重要,但您应该遵循这条规则。然后您可以阅读有关关系数据库设计的内容。你可以开始了。一个标准化的数据库就足够了。如果你不知道这意味着什么,我听说过《为凡人设计数据库》这本书的好消息。我建议将关键市场存储在交叉表中,这样你就可以通过将它们的ID分配给公司ID来避免数据库中的冗余。@Dustinklie完全同意,我错了@Mag Ron-Re:以上第(1)点:不要这样做!达斯汀说了这一点,我支持这一说法。在单个字段中组合值也会引发这样的问题:允许多少个值?如何区分它们,例如电话号码(家庭、工作、手机、传真、近亲等)?最大组合长度是否开始受到最大行大小限制?不要去那里。我感谢你的帮助。我正在这样做。我将这些列放入它们自己的表中。现在我有大约30张桌子。但是,我收到了一个错误,因为我可以索引company_id的数量是有限的。不过,我通过不强制引用完整性来绕过它。因为列之间没有关系。我无法将它们彼此联系起来。例如选择公司名称,网站就可以了。但如果我把公司名称、网站、历史记录放在一起,它只会显示有“网站”和“历史记录”的公司。我需要在历史记录中创建空值,以便能够正确显示它。