Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Структура БД 2: от сложного к простому? (продолжаем нормализацию)
 
 автор: napTu3aH   (02.09.2005 в 12:32)   письмо автору
 
 

Возвращаясь к нашим булочкам :)

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-й. Что сделать столбцами-названия заводов или хлеб изделий.
Как грамотно заносить данные, чтобы они стыковались с соответствующими хлеб изделиями и заводами.

   
 
 автор: cheops   (02.09.2005 в 13:05)   письмо автору
 
   для: 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 - не придётся менять струтктуру таблиц - у вас просто увеличится число записей в таблицах.

   
 
 автор: napTu3aH   (02.09.2005 в 14:00)   письмо автору
 
   для: cheops   (02.09.2005 в 13:05)
 

Брррр. Что-то я совсем запутался. :(
А как мне тогда ввести во 2-ю таблицу ассортимент например "завода№1"?
А 3-я таблица никак не отражаетсья в 4-й таблице индексации?

Если у вас будет время, не могли бы вы мне привести по 1 значению в каждой таблице, и их соответствия в 4-й. Я смутно все это себе представляю :(

   
 
 автор: cheops   (02.09.2005 в 21:06)   письмо автору
 
   для: napTu3aH   (02.09.2005 в 14:00)
 

>А как мне тогда ввести во 2-ю таблицу ассортимент например
>"завода№1"?
А она не нужна, вы всегда сможете воспроизвести ассортимент из двух-табличного запроса к таблице соответствия (4) и таблицы изделий (1)
>А 3-я таблица никак не отражаетсья в 4-й таблице индексации?
Хм... извиняюсь тогда 4 таблица не нужна, так как она по сути выполняет функции третьей. Структура третьей таблицы должна быть схожа со структурой предложенной таблицы соответсвия + цены.

>Если у вас будет время, не могли бы вы мне привести по 1
>значению в каждой таблице, и их соответствия в 4-й. Я смутно
>все это себе представляю :(
С удовольствием и даже можем с вами продумать запросы на разные случаи жизни, но что-бы мне не изобретать новые имена и ещё больше не запутывать ситуацию не могли бы вы привести структуру первой и третьей таблицы и пару записей из них?

   
 
 автор: napTu3aH   (03.09.2005 в 12:00)   письмо автору
 
   для: cheops   (02.09.2005 в 21:06)
 

привожу данные из БД
3-ю попытался создать сам проверьте, может что не так.
и если нет изделия в ассортименте я поставил цену 0 или как поступить?

из запросов я могу вывести все, но по отдельности, а как вывести цены на "Супер-Контик с орехом" по всем заводам, в которых он есть и на этой же странице разместить ссылку на его игридиенты?

спасибо за помощь

   
 
 автор: cheops   (03.09.2005 в 12:25)   письмо автору
 
   для: 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 называете - у вас же вроде раньше осмысленные имена у них были?

   
 
 автор: napTu3aH   (03.09.2005 в 12:39)   письмо автору
 
   для: cheops   (03.09.2005 в 12:25)
 

Спасибо здорово помогли!
>PS Только зря вы таблицы table1 и table2 называете - у вас же вроде раньше осмысленные имена у них были?
У меня на работе нет БД пришлось на ходу вспоминать, что есть :)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования