В нашем приложении у нас есть clients
, и у каждого клиента есть список customers
client table:
id | name
-------------
1 | happy
2 | bashful
customer table:
id | client_id | name
----------------------------------------
50 | 1 | happys first customer
51 | 1 | happys second customer
52 | 2 | bashfuls first customer
. Не вдаваясь в подробности, у каждого клиента будет список применимых цен.им.Для простоты мы скажем, что у нас также есть таблица продуктов с идентификаторами продуктов 1,2 и 3, и у каждого покупателя будет уникальная цена для каждого товара.Таким образом, у клиента 50 будет 3 строки, у клиента 51 будет 3 строки, а у клиента 52 будет 3 строки в этой price
таблице.
price table:
id | customer_id | product_id |
----------------------------------------
50 | 50 | 1 | 4.99
51 | 50 | 2 | 6.20
52 | 50 | 3 | 8.00
...
Теперь вот кикер: каждый клиент должен такжеУ есть свои строки в этой таблице price
.Мы будем называть этот прайс-лист клиента «базовым списком», поскольку в контексте приложения сравниваются все цены клиентов.
Существует три сразу очевидных решенияя, но я не уверен, что кто-то из них прав, или какой из них оптимален:
Решение 1
Добавьте строку в таблицу клиентов, где имя будет выглядеть как «Я».', так что' self 'может рассматриваться почти как клиент
.
Решение 2
Сделать таблицу цен двумя столбцами внешнего ключа, один с customer_id и одинс client_id, и разрешить customer_id быть нулевым - если customer_id равен null, я знаю, что строка является строкой клиента.
.
Решение 3
Имеет 2 таблицы ценкоторые в основном идентичны: один для внешнего ключа для клиентов и один для внешнего ключа для клиентов.