БД Дизайн | Многие ко многим - местоположения компаний и клиентов

0

Предположим, что у меня есть эти таблицы:

  • компании (id, имя, телефон, электронная почта)
  • клиенты (идентификатор, имя, телефон, электронная почта)
  • местоположения (id, city, state)

Каждая компания и каждый клиент могут иметь несколько мест.

Каков наилучший и быстрый способ создания вышеуказанных отношений, предполагая, что в моем приложении мне нужно будет искать все компании, которые связаны, по крайней мере, с одним местоположением клиентов с id = N и наоборот?


Не удалось найти более общий заголовок, не стесняйтесь изменить его на какой-то общий.

  • 0
    Есть ли отношения с компанией и клиентом?
  • 0
    @Mittal Mittal Нету, между ними нет никаких отношений
Теги:
many-to-many

2 ответа

3

По моему мнению, вы можете создать таблицу, как показано ниже:

  • местоположения (id, city, state)
  • компании (id, имя, телефон, электронная почта)
  • companylocations (id, CompanyId, locationId) - Иностранный ключ с таблицей компаний и мест
  • клиенты (идентификатор, имя, телефон, электронная почта)
  • customerlocations (id, customerId, locationId) - Внешний ключ с таблицей клиентов и местоположений

Добавьте индексы ниже столбцов, чтобы быстрее получать данные

  • customerlocations (customerId, locationId)
  • companylocations (CompanyId, locationId)

id для всех таблиц будет первичным ключом, поэтому у нас есть индекс.

  • 0
    Я так и думал, но будет ли это достаточно быстро при поиске, как я описал ранее? И как мне это искать? Вероятно, он будет содержать несколько соединений, что приведет к плохой производительности.
  • 0
    Если вы добавите правильные индексы, тогда ваш поиск будет быстрее, и я думаю, что вам нужно максимум 2-4 соединения, чтобы достичь этого, и это было бы хорошо
Показать ещё 2 комментария
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. 
  • 0
    Это не то, что я просил .. Прочтите мой вопрос еще раз.
  • 0
    я так зря, я скучаю, понял проблему, но надеюсь, что это поможет

Ещё вопросы

Сообщество Overcoder
Наверх
Меню