2017-02-11 24 views
0

Нужно знать, что структура БД точна или нет? Допустим, есть клиенты/продукция/product_eventsПопытка понять подход к отношениям БД между различными таблицами

Где каждый клиенты могут иметь несколько продуктов, но продукт не может иметь более одного клиента, также каждая продукция может иметь несколько событий

Итак, вот что у меня есть, например,

customers   products       product_events 
-----------  ------------------------------  ------------------------ 
id | name   id | customer_id | name    id | product_id | event_title 

, как я предполагаю, что это один => многие отношения

, но здесь может быть большое количество продуктов, а некоторые из них или позволяет сказать, многие из них (продукции), не может быть Асси (другими словами, не продается клиентам)

Таким образом, чтобы сохранить список продуктов и список продуктов для покупателей, это хороший подход , чтобы иметь какую-либо промежуточную таблицу для определения отношения продуктов к клиенту?

Так как об этом stucture

customers   products  customer_products     
-----------  ---------------  ------------------------------  
id | name   id | name  id | customer_id | product_id 

product_events 
--------------------- 
id | product_id | event_title 

Для большинства использования этих структур списка продуктов событий будет получать по конкретному клиенту

ответ

1

Имея customer_id колонки в products таблицы будет означать, что только один у клиента может быть определенный продукт - например, мы с вами не могли купить тот же ноутбук, который просто звучит не так.

Промежуточный стол customer_products звучит как правильный путь.

+0

Но брат, главное, та же модель продукта может быть продана только одному клиенту, продукты уникальны с их номерами моделей в этом примере –

+0

@MuhammadNawazMemon в этом случае, можете ли вы уточнить свою озабоченность по поводу первоначального подхода? Если каждый продукт может принадлежать ровно одному клиенту, это кажется правильным путем. Просто используйте «null» для непроданного продукта. – Mureinik

+0

Правильно, это то, что у меня есть сейчас. , но я не могу установить foreign_key для customer_id в таблице продуктов, так как это может быть null .. из-за продукта не продано. что делать в этом случае? –

0

С учетом таблиц «Клиент» и «ПРОДУКТ» существует множество отношений «От многих до многих» между двумя таблицами. поэтому вам нужно создать 3-й стол для поддержания отношений. что 3-я таблица должна включать два основных ключа обеих таблиц отношений и другие атрибуты, которые костятся из-за отношения. Первичный ключ третьей таблицы должен быть комбинацией обоих ключей от таблиц отношений.

+0

В таблице много: нет необходимости в 'id'. См. Мой [_tips_] (http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table). –