SQL

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

Здравствуйте. Я только начал изучать mySQL и у меня появился вопрос. Он, вероятно, глупый, я пока не в силах это понять. Можно ли связать одно поле таблицы с несколькими ячейками другой таблицы?
У меня есть таблицы "Магазины" и "Товары".
Например, есть товар - кукуруза. Эта кукуруза есть в Ашане и Просторе, абсолютно одинаковая, но по разным ценам. Можно ли обойтись без создания отдельной таблицы для кукурузы и просто внести в поле "магазин" и "цена" по два значения? Если это возможно, то насколько сложно такое соорудить?
Я бы использовал сериалайз, но хочется сделать функциональную базу.
Davron Eshonkulov
Davron Eshonkulov
105
CREATE TABLE tovar
(
tovar INT NOT NULL AUTO_INCREMENT,
item VARCHAR(100) NOT NULL,
PRIMARY KEY(tovar),
UNIQUE KEY(item)
)
CREATE TABLE magazin
(
magazin INT NOT NULL AUTO_INCREMENT,
item VARCHAR(100) NOT NULL,
PRIMARY KEY(magazin),
UNIQUE KEY(item)
)
CREATE TABLE cena
(
tovar INT NOT NULL,
magazin INT NOT NULL
cena NUMERIC(6,2)
PRIMARY KEY(tovar,magazin,cena)
)

SELECT t.item,m.item,c.cena
FROM tovar t,magazin m,cena c
WHERE t.tovar=c.tovar AND m.magazin=c.magazin AND t.tovar=1
где 1- это код "Кукурузы"

Данные таблицы "cena" просекционируешь и запрос по база со 150 000 000 записей будет примерно в районе 0.02 сек. Усё!!! Удачи.
АА
Асылбек Айдарбеков
11 877
Лучший ответ
создается таблица "Магазины" и "Товары". Можно записывать несколько позиций в "Товары" и указывать разные магазины. А второй способ создание третьей таблицы. Если хранить в одном поле несколько значений, то нарушается атомарность записи
Предлагаемая ВАми версия не самая удачная.. И я так не понял причём тут сериализация?
Используйте возможности реляционных баз данных.

таблица - Магазины

id MagName IDTovar TovarPrice
------------------------------------------------------------
1 | Фазан | 2 | 10 р.
2 | Цветочный | 1 | 12 р.

Таблица: Товары

id TovarName
------------------------------
1 | Роза |
2 | Кукуруза |

Таблица : Заказы

id MagID IDTovar Quantity TotalPrice
------------------------------------------------------------
1 | 1 | 2 | 10 | 100 p
2 | 2 | 1 | 15 | 180 p

Запросы в коментах....
Саша Грабован Выясняем каие есть магазины и какими товарами они торгуют:

SELECT
S.id,
S.MagName,
T.TovarName,
S.TovarPrice -- за единицу товара
FROM Магазин as S
INNER JOIN Товары as T on S.IDTovar = T.id

Выясняем какие заказы сделали магазины, чтоб пополнить свои прилавки свежим товаром.

SELECT
Z.id,
S.MagName,
T.TovarName,
S.TovarPrice, --за единицу товара
Z.Quantity,
Z.TotalPrice
FROM Заказы as Z
INNER JOIN Магазины as S on Z.Mag = S.id
INNER JOIN Товары as T on S.IDTovar = T.id
Саша Грабован Выясняем каие есть магазины и какими товарами они торгуют:

SELECT
S.id,
S.MagName,
T.TovarName,
S.TovarPrice -- за единицу товара
FROM Магазин as S
INNER JOIN Товары as T on S.IDTovar = T.id

Выясняем какие заказы сделали магазины, чтоб пополнить свои прилавки свежим товаром.

SELECT
Z.id,
S.MagName,
T.TovarName,
S.TovarPrice, --за единицу товара
Z.Quantity,
Z.TotalPrice
FROM Заказы as Z
INNER JOIN Магазины as S on Z.Mag = S.id
INNER JOIN Товары as T on S.IDTovar = T.id
SELECT table1.id, table2.id FROM table1, table2
Вывод id из двух таблиц
Саша Грабован Ужас! Где тут связь? )))
Лучше не хранить несколько значений в одном поле. У вас простите "говнокод" получится.
Вам нужно соорудить две таблицы. Одна с наименованиями итема, другая с его параметрами и колонкой "ключем" которая привязывает эти параметры к конкретному продукту, где скажем ключь = id продукта. И проблем не возникнет.