Здравствуйте. Я только начал изучать mySQL и у меня появился вопрос. Он, вероятно, глупый, я пока не в силах это понять. Можно ли связать одно поле таблицы с несколькими ячейками другой таблицы?
У меня есть таблицы "Магазины" и "Товары".
Например, есть товар - кукуруза. Эта кукуруза есть в Ашане и Просторе, абсолютно одинаковая, но по разным ценам. Можно ли обойтись без создания отдельной таблицы для кукурузы и просто внести в поле "магазин" и "цена" по два значения? Если это возможно, то насколько сложно такое соорудить?
Я бы использовал сериалайз, но хочется сделать функциональную базу.
SQL
Можно ли связать одно поле таблицы с несколькими полями другой таблицы?
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 сек. Усё!!! Удачи.
(
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 сек. Усё!!! Удачи.
создается таблица "Магазины" и "Товары". Можно записывать несколько позиций в "Товары" и указывать разные магазины. А второй способ создание третьей таблицы. Если хранить в одном поле несколько значений, то нарушается атомарность записи
Предлагаемая ВАми версия не самая удачная.. И я так не понял причём тут сериализация?
Используйте возможности реляционных баз данных.
таблица - Магазины
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
Запросы в коментах....
Используйте возможности реляционных баз данных.
таблица - Магазины
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 table1.id, table2.id FROM table1, table2
Вывод id из двух таблиц
Вывод id из двух таблиц
Саша Грабован
Ужас! Где тут связь? )))
Лучше не хранить несколько значений в одном поле. У вас простите "говнокод" получится.
Вам нужно соорудить две таблицы. Одна с наименованиями итема, другая с его параметрами и колонкой "ключем" которая привязывает эти параметры к конкретному продукту, где скажем ключь = id продукта. И проблем не возникнет.
Вам нужно соорудить две таблицы. Одна с наименованиями итема, другая с его параметрами и колонкой "ключем" которая привязывает эти параметры к конкретному продукту, где скажем ключь = id продукта. И проблем не возникнет.
Похожие вопросы
- SQL. Есть таблица а и b как мне поставить ограничение на поле таблицы b, на основании поля таблицы a? пример в описании
- Как в одной записи таблицы хранить несколько полей одного типа (не фиксированное число)?
- как в PostgreSQL(!) сделать группировку по одному полю но вывести в результат остальные поля из таблицы
- Как связать две таблицы между собой?
- Вопрос по SQL - уникальное поле ID для трёх таблиц (нельзя вставить значения в одну, если оно есть в другой таблице).
- Блин что то не могу найти способ произвести эффективную выборку данных из таблицы БД?
- SQL,БД. Какие данные могут быть в таблице users?
- Postgresql Как правильно наладить связь между таблицами в базк данныъ?
- UPDATE обновить все таблицы.. помогите с запросом??? (вн подробнее)
- PostgreSQL Extensions. С помощью модуля tablefunc получите из таблицы projects базы HR
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