2012-02-26 4 views
0

Я реализую базу данных о ценах, где несколько продавцов продают один и тот же продукт по разным ценам. Каждый продукт уникален и идентифицируется его model_number. Прямо сейчас у меня есть 1 продавец в моем ценовом столе. Я ищу лучший способ построить таблицу, которая может перечислить несколько цен с каждым цена является полем для строки, чей первичный ключ model_numberMysql стол. Должен ли я использовать несколько таблиц?

таблица выглядит следующим образом:

model_number | seller | price 
abc   Store1 99.99 

Эта структура работает хорошо, когда есть только 1 продавец, поскольку основным ключом является номер модели и мой запрос на обновление использования цены при повторном ключевом обновлении, который обновляет продукт только в случае изменения цены. Кроме того, первичный ключ - это номер модели, но если у меня есть несколько продавцов, у которых одинаковый номер модели, но с другой ценой, я считаю, что при обновлении таблицы база данных будет запутана, так как будут дубликаты model_number.

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

Благодаря

ответ

3

Вы можете сделать model_number и ключ продавца первичный. Таким образом, вы можете иметь несколько кортежей с одним и тем же номером model_number, если продавцы будут отличаться.

model_number | seller | price 
abc   Store1 99.99 
abc   Store2 9.99 

Это то, что вы хотите?

+0

Я так считаю. Я не буду сталкиваться с проблемой при запуске 'on duplicate key update'? –

+0

Пока вы не вставляете строку с продавцом model_nr и продавцом, который уже находится в БД в одной строке, поскольку эта строка уникальна. – nyvaken

+0

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

0

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

Я думаю, что вы подразумеваете под «дать каждому продавцу уникальный ключ для своего продукта» на самом деле то, что они называют суррогатным ключом. Вы могли бы дать таблицу столбец первичного ключа, так это выглядит, как этот

id | model_number | seller | price 

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

0

От многих до многих отношений вы имеете дело с здесь.

Вы хотите три таблицы для этого решения:

Продукты: таблица с информацией продукции, в том числе уникальный автоинкрементным идентификатор.

Продавцы: Таблица с информацией о продавцах, включая уникальный идентификатор автоинкремента.

Products_To_Sellers: таблица с product_id и seller_id (INDEX эти столбцы индивидуально)

При таком подходе, вы можете присоединиться к таблицам для просмотра продавцов продуктов, но в конечном счете, есть SCHEMA, масштабируемую бесконечно

+0

Но если обновить таблицу, сможет ли она связать новые данные с соответствующим идентификатором auto_incremented? –

+0

Зачем нужен автоинкрементный идентификатор в продуктах, если (как требования OP) продукт уже идентифицирован по его «model_number»? –

0
[seller] [product_seller] [product] 
    -id  seller.id   -id -price 
       product.id 

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

[seller] [product_seller] [product] [seller_price] 
-id  seller.id  -id  product.id 
      product.id     seller.id 
             -price 
1

enter image description here

три таблицы: Seller, Seller_Product, Product

Каждая строка таблицы связующей Seller_Product содержит два внешних ключей к соответствующему продавца и продукции ряда. price является атрибутом связи между Продавцом и Продуктом. Таким образом, он становится полем в таблице ссылок.

Продавец: ID, имя, ...
Seller_Product: Seller_ID, PRODUCT_ID, цена, наличие, ...
Продукт: ID, имя, model_number, производитель , ...

Это общий дизайн стола для отношения N: M.

Смежные вопросы