|
|
|
| Возвращаясь к нашим булочкам :)
Loki помог мне разобраться с количеством и составом таблиц, действительно 3 таблицы будет оптимальный вариант(хотя я сначала пытался разместить все в 1).
Таблица1: Название хлеб изделия, ингридиенты и др.
С этой таблицей я разобрался, у меня 200-300 хлеб изделий и при выборе любого выводитсья информация о нем.
Таблица2: Название хлебзавода, и ассортимент. Тут проблемы: сделать так
CREATE TABLE 'hleb_base' (
'id' int(11) NOT NULL auto_increment,
'Zavod_name' text,
'hleb_izdel1' enum(0,1) NOT NULL,
'hleb_izdel2' enum(0,1) NOT NULL,
'hleb_izdel3' enum(0,1) NOT NULL,
PRIMARY KEY ('id')
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
|
но тогда у меня будет 200-300 полей, которые к тому же и обновляться будут 2 раза в месяц. А хлебзаводов максимум 50, обновляться будут максимум раз в пол года.
Как мне правильно организовать эту таблицу?
Таблица3: цены на хлеб изделия в каждом магазине.
Тут та же проблема, что и во 2-й. Что сделать столбцами-названия заводов или хлеб изделий.
Как грамотно заносить данные, чтобы они стыковались с соответствующими хлеб изделиями и заводами. | |
|
|
|
|
|
|
|
для: napTu3aH
(02.09.2005 в 12:32)
| | А нет... вторая таблица должна содержать всего два поля
CREATE TABLE hleb_base (
id int(11) NOT NULL auto_increment,
Zavod_name text,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
|
А для того, чтобы сопоставить хлеб.изделия и магазины следует ввести четвёртую таблицу соответствия
CREATE TABLE hleb_comutator (
id int(11) NOT NULL auto_increment,
id_base int(11),
id_hleb_izdel int(11)
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
|
Где id_base - значение первичного ключа таблицы хлебозаводов (второй таблицы), а
id_hleb_izdel - значение первичного ключа таблицы хлеб. изделий (первой таблицы).
Тогда если у вас число хлеб изделий вдруг неожиданно возрастёт до 500 - не придётся менять струтктуру таблиц - у вас просто увеличится число записей в таблицах. | |
|
|
|
|
|
|
|
для: cheops
(02.09.2005 в 13:05)
| | Брррр. Что-то я совсем запутался. :(
А как мне тогда ввести во 2-ю таблицу ассортимент например "завода№1"?
А 3-я таблица никак не отражаетсья в 4-й таблице индексации?
Если у вас будет время, не могли бы вы мне привести по 1 значению в каждой таблице, и их соответствия в 4-й. Я смутно все это себе представляю :( | |
|
|
|
|
|
|
|
для: napTu3aH
(02.09.2005 в 14:00)
| | >А как мне тогда ввести во 2-ю таблицу ассортимент например
>"завода№1"?
А она не нужна, вы всегда сможете воспроизвести ассортимент из двух-табличного запроса к таблице соответствия (4) и таблицы изделий (1)
>А 3-я таблица никак не отражаетсья в 4-й таблице индексации?
Хм... извиняюсь тогда 4 таблица не нужна, так как она по сути выполняет функции третьей. Структура третьей таблицы должна быть схожа со структурой предложенной таблицы соответсвия + цены.
>Если у вас будет время, не могли бы вы мне привести по 1
>значению в каждой таблице, и их соответствия в 4-й. Я смутно
>все это себе представляю :(
С удовольствием и даже можем с вами продумать запросы на разные случаи жизни, но что-бы мне не изобретать новые имена и ещё больше не запутывать ситуацию не могли бы вы привести структуру первой и третьей таблицы и пару записей из них? | |
|
|
|
|
|
|
|
для: cheops
(02.09.2005 в 21:06)
| | привожу данные из БД
3-ю попытался создать сам проверьте, может что не так.
и если нет изделия в ассортименте я поставил цену 0 или как поступить?
из запросов я могу вывести все, но по отдельности, а как вывести цены на "Супер-Контик с орехом" по всем заводам, в которых он есть и на этой же странице разместить ссылку на его игридиенты?
спасибо за помощь | |
|
|
|
|
|
|
|
для: napTu3aH
(03.09.2005 в 12:00)
| | Хм... а ну вот мне даже ничего делать не нужно :))) Если бы я проектировал, то спроектировал точно таким же образом.
>и если нет изделия в ассортименте я поставил цену 0 или как поступить?
А вы вообще удалите эту запись - база данных это модель реального мира - если хлебозавод не производит такого хлеб.изделия в таблицу hleb_comutator его и не нужно помещать. Конечно мало кто поверит, что хлебозавод будет раздавать это хлеб.изделие бесплатно, но многие будут думать, что оно не производится временно и его нет только на этой неделе.
>из запросов я могу вывести все, но по отдельности, а как вывести цены на "Супер-
>Контик с орехом" по всем заводам, в которых он есть и на этой же странице
>разместить ссылку на его игридиенты?
Нужный вам запрос выглядит следующим образом
SELECT table2.name AS name,
hleb_comutator.cena AS cena
FROM table1, table2, hleb_comutator
WHERE table1.name = 'Супер-Контик с орехом' AND
hleb_comutator.id_hleb_izdel = table1.id AND
hleb_comutator.id_base = table2.id
|
А ссылку на ингридиенты следует давать указывая в параметре страницы первичный ключ таблицы table1, затем извлекать этот параметр и осуществлять запрос к таблице table1 на странице ингридиентов.
<a href=index.php?id=1></a>
|
PS Только зря вы таблицы table1 и table2 называете - у вас же вроде раньше осмысленные имена у них были? | |
|
|
|
|
|
|
|
для: cheops
(03.09.2005 в 12:25)
| | Спасибо здорово помогли!
>PS Только зря вы таблицы table1 и table2 называете - у вас же вроде раньше осмысленные имена у них были?
У меня на работе нет БД пришлось на ходу вспоминать, что есть :) | |
|
|
|