【问题标题】:Supplier-customer relationship in the same table供应商-客户关系在同一张表中
【发布时间】:2016-10-28 12:51:30
【问题描述】:

我不是 MySQL 专家,我必须为我的关卡设计一个相当复杂的数据库。

我现在面临的问题是在同一张表中存在供应商-客户关系(公司的宏观类别):

宏表

id    name          mega_id    macro_customer_id
------------------------------------------
1     Furniture     2          2,4,5,35

我想表示一个事实,即 id 为 1 的宏条目在同一张表中描述了其他宏公司(它们是他们的客户)。

什么是最好的表达方式?

谢谢!

【问题讨论】:

  • 您将有一个单独的表 macro_customers,其中每一行都包含宏的 ID 和其客户的 ID
  • 好吧,不是显示的方式。拍摄关联表或联结表stackoverflow.com/a/32620163
  • 我用@Drew 链接解决了这个问题,我创建了一个单独的表,将宏表中的 id 与同一张表中的其他 id 链接起来。听起来对吗?
  • 如果您有两个主要实体类型表(如学生和课程类比),但您的表完全规范化,列中没有 CSV 数据,第三个表作为连接表,类似于我所做的(有体面的综合指数)....那么我认为你的方式很好。恭喜!

标签: mysql join database-design


【解决方案1】:

这取决于:我们都曾经使用过规范化形式(如 @1000111 所示),但是根据数据的使用,您可以选择在此规范化讨论的某些部分查看不同的内容:

正常的模型是:

 Table userData(id,name) 
    - 1:N table linkTable(id,macro_customer_id) 
         - N:1 table metaData(macro_customer_id,value)

或者:

 Table userData(id,name) 
    - 1:N table linkTable(macro_customer_id,id) 

然而,最大的问题是如何使用数据。如果数据只针对这个用户并且没有以任何其他方式查询(无位置或分组依据),那么将其存储为序列化字符串是一种完全有效的方法。

【讨论】:

    【解决方案2】:

    RDBMS 中实体之间的关系应该以关系的方式存储。问问自己,您是否关心数据库中的这种关系——您是否需要编写将macro.id 链接到macro.macro_customer_id 中的ID 表示的表/行的查询?如果是,那么您必须将此关系存储在(一对多或多对多)单独的表中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-26
      • 2020-02-21
      • 1970-01-01
      • 2015-11-12
      相关资源
      最近更新 更多