Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> посоветуйте структуру БД каталога продукции, продукция относится к нескольким группам 
V
    Опции темы
slang
Дата 25.1.2008, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 455
Регистрация: 7.3.2004

Репутация: 1
Всего: 0



Надо сделать простенькую базу для хранения каталога продукции. При этом исходя из принципа "все гениальное просто"  smile подумал что вполне можно сделать базу так:
id – код продукции или группы продукции (счетчик)
id_group – id группы в которую входит эта группа или продукция (число)
name – наименование продукции или группы продукции (текст до 200 символов)
pic – имя файла с изображением (текст до 100 символов)
comment – описание продукции (текст до 65000 символов)

но вот подумал, а если продукция будет относиться к нескольким группам, то каким образом изменить поле id_group?


--------------------
Запчасти на иномарки www.avtograd55.ru.
Если есть время - зайдите и посоветуйте что исправить и что доработать.
PM MAIL WWW ICQ   Вверх
GeneralElectric
Дата 25.1.2008, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 2
Всего: 16



тут должно было быть две таблицы.
Одна - каталог, а вторая - продукция.
PM MAIL   Вверх
slang
Дата 25.1.2008, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 455
Регистрация: 7.3.2004

Репутация: 1
Всего: 0



GeneralElectric, это я понимаю smile, но хочется выпендриться и сделать в одной, а собственно почему и нет?
Предположим речь идет не о продукции, а о чем-то другом... Например, возьмем кабинет... smile, есть кабинет, как корень (первая группа), в кабинете есть элементы: стол, стул, диван, компьютер. Вроде все нормально smile, но стол также является группой, так как к столу относятся: столешница, ножки, винты (еще что-то). Отсюда, мне необходимо заводить в таблице с категориями группу стол, а зачем мне заниматься дублированием?

Если только сделать так:
Таблица номенклатура:
id – код продукции или группы продукции (счетчик)
name – наименование продукции или группы продукции (текст до 200 символов)
pic – имя файла с изображением (текст до 100 символов)
comment – описание продукции (текст до 65000 символов)

Таблица группировки:
id - счетчик
id_prod - id продукции (группы) (число)
id_group - id продукции (группы) к которой относится эта продукция

Добавлено через 43 секунды
есть у кого идеи лучше?


--------------------
Запчасти на иномарки www.avtograd55.ru.
Если есть время - зайдите и посоветуйте что исправить и что доработать.
PM MAIL WWW ICQ   Вверх
bars80080
Дата 25.1.2008, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 9
Всего: 315



если у тебя идёт дальнейшее ветвление, да ещё с участием пунктов в разных ветках, то лучше сделать в две таблицы
просто некоторые пункты каталога (содержание которых - иерархия и id элемента) будут обращаться на один и тот же пункт (содержание - большой объём данных)
PM MAIL WWW   Вверх
vasac
Дата 25.1.2008, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 3
Всего: 36



Вы определитесь сначала, вам дерево нужно или "продукция может относиться к нескольким группам".
Если дерево, какие проблемы? id, parent_id.
Если к нескольким группам — нужна отдельная таблица соответствий объект-предок.
PM WWW   Вверх
slang
Дата 25.1.2008, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 455
Регистрация: 7.3.2004

Репутация: 1
Всего: 0



vasac, а разве одно исключает другое?!
Примерно так... не пойдет?
Код

CREATE TABLE `katalog` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 100 ) NOT NULL ,
`pic` VARCHAR( 50 ) NOT NULL ,
`comment` LONGTEXT NOT NULL 
) ENGINE = innodb COMMENT = 'элементы или группы элементов';

CREATE TABLE `katalog_group` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`id_element` INT NOT NULL ,
`id_group` INT NOT NULL 
) ENGINE = innodb COMMENT = 'таблица соответствия элементов и групп';


id_group и id_element связаны с id из таблицы katalog


--------------------
Запчасти на иномарки www.avtograd55.ru.
Если есть время - зайдите и посоветуйте что исправить и что доработать.
PM MAIL WWW ICQ   Вверх
GeneralElectric
Дата 25.1.2008, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 2
Всего: 16



Где у тебя связь между ними? тут ещё третья нужна
А в остальном - думаю, ты сам придешь к тому, чтобы не смешивать разделы каталога и его содержимое. Но заставить тебя, разумеется, невозможно. Не хочешь учиться на чужих ошибках - учись на своих.
PM MAIL   Вверх
slang
Дата 25.1.2008, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 455
Регистрация: 7.3.2004

Репутация: 1
Всего: 0



GeneralElectric, ты часто прописываешь связи в MySQL базе? я всегда это делаю в скрипте.
Т.е. такая база является не корректной?
Код

CREATE TABLE `katalog` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(100) NOT NULL,
  `pic` varchar(50) NOT NULL,
  `comment` longtext NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 COMMENT='элементы или группы элементов' AUTO_INCREMENT=5 ;

INSERT INTO `katalog` (`id`, `name`, `pic`, `comment`) VALUES (1, 'Первый элемент', '', ''),
(2, 'Второй элемент', '', ''),
(3, 'Третий элемент', '', ''),
(4, 'Четвертый элемент', '', '');

-- --------------------------------------------------------

CREATE TABLE `katalog_group` (
  `id` int(11) NOT NULL auto_increment,
  `id_element` int(11) NOT NULL,
  `id_group` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 COMMENT='таблица соответствия элементов' AUTO_INCREMENT=5 ;

INSERT INTO `katalog_group` (`id`, `id_element`, `id_group`) VALUES (1, 2, 1),
(2, 3, 1),
(3, 4, 2),
(4, 4, 3);


здесь Первый элемент - корень (группа, но не обязательно). В него входят второй и третий элементы, а также они являются группой для четвертого элемента, который входит как во второй, так и в третий элемент.


--------------------
Запчасти на иномарки www.avtograd55.ru.
Если есть время - зайдите и посоветуйте что исправить и что доработать.
PM MAIL WWW ICQ   Вверх
GeneralElectric
Дата 25.1.2008, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 2
Всего: 16



Не понял. Что значит - прописывать связи в скрипте?

Таблицу я твою не понял. Может, я совсем тупой, а такое решение слишком прогрессивное, но реализацию в одной и той же таблице и дерева, и связи один-ко-многим - я не могу.

Постой. У тебя там дерева вобще, что ли, нету? Срабатывает стереотип мышления - еслим каталог, то дерево. понятно.
Тогда id во второй таблице - лишнее поле, а в остальном - классическая схема.
PM MAIL   Вверх
slang
Дата 25.1.2008, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 455
Регистрация: 7.3.2004

Репутация: 1
Всего: 0



Цитата(GeneralElectric @  25.1.2008,  20:21 Найти цитируемый пост)
Тогда id во второй таблице - лишнее поле, а в остальном - классическая схема.

ну это я по привычке smile, любую таблицу начинаю с id


--------------------
Запчасти на иномарки www.avtograd55.ru.
Если есть время - зайдите и посоветуйте что исправить и что доработать.
PM MAIL WWW ICQ   Вверх
GeneralElectric
Дата 25.1.2008, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 2
Всего: 16



Нет, я снова туплю. Дерево, конечно же, есть. Единица является папой двойки, а двойка - четверки.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.1018 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.