【问题标题】:DB Design | Many to Many - companies & customers locations数据库设计 |多对多 - 公司和客户位置
【发布时间】:2018-07-31 14:23:43
【问题描述】:

假设我有这些表:

  • 公司(ID、姓名、电话、电子邮件)
  • 客户(ID、姓名、电话、电子邮件)
  • 位置(ID、城市、州)

每个公司和每个客户都可以有多个位置。

假设在我的应用程序中,我需要搜索与至少一个 id=N 的客户位置相关的所有公司,反之亦然,那么创建上述关系的最佳和最快方法是什么?


找不到更通用的标题,请随意将其更改为通用标题。

【问题讨论】:

  • 与公司和客户有关系吗?
  • @Mittal nope,他们之间没有任何关系

标签: mysql sql many-to-many


【解决方案1】:

您可以为公司和客户建立一些连接表。

Companies  
id (pk)
name
phone
email

Companies_location
id (pk)
company_id (reference to Companies table id) (fk)
location_id (reference to  Location Table id) (fk)

Customers
id (pk)
name
phone
email

Customers_location
id (pk)
customer_id (reference to Customers table id) (fk)
location_id (reference to  Location Table id) (fk)

Location
id (pk)
state
city

SQL 语句:

You can use Union because they have same field. 

【讨论】:

  • 这不是我要求的……再读一遍我的问题。
  • 我很抱歉,我想念这个问题,但希望它有所帮助
【解决方案2】:

我认为您可以创建如下表格:

  • 位置(ID、城市、州)
  • 公司(ID、姓名、电话、电子邮件)
  • companylocations (id, CompanyId, locationId) - 带有公司和位置表的外键
  • 客户(ID、姓名、电话、电子邮件)
  • customerlocations (id, customerId, locationId) - 带有客户和位置表的外键

为下面的列添加索引以更快地获取数据

  • 客户位置(customerId、locationId)
  • companylocations (CompanyId, locationId)

所有表的id 列都将是主键,因此我们有一个索引。

【讨论】:

  • 我是这么想的,但是像我之前描述的那样搜索是否足够快?无论如何我该如何搜索?它可能会包含多个 JOIN,这会导致性能不佳。
  • 如果你添加适当的索引,那么你的搜索会更快,我认为你需要最多 2-4 个连接来实现这一点,这很好
  • 你正在为第四范式苦苦挣扎。每个多对多关系都需要一个单独的交集表。下面的两个答案都告诉你这是正确的。
猜你喜欢
  • 2020-04-29
  • 1970-01-01
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
  • 1970-01-01
相关资源
最近更新 更多