Отправляет email-рассылки с помощью сервиса Sendsay

Каталог продукции

Привет всем подписчикам!

Люди, кто занимается программированием, помогите с идеей. У меня
возникла проблема разработки каталога продукции. Точнее базы данных
для каталога.

Задача следующая: каталог должен иметь неограниченную степень
вложенности разделов. Для каждого раздела должна быть возможность
добавлять неограниченное число параметров. При добавлении товара в
раздел, он (товар) "наследует" все параметры раздела.

Я одну структуру сделал, но там появляются колизии при удалении
элементов.

Ребята, кому по силам помогите!!!!

Ответить   Fri, 10 Jun 2005 17:46:32 +0400 (#382469)

 

Ответы:

Или удалять всё дерево, или сделать защиту от удаления (не давать удалить,
если есть подчинённые разделы) и сделать функцию поиска потерянных данных и
их восстановление.

С уважением, Косарев Дмитрий





библиотекa сайтостроительства http://www.i2r.ru/static/244/

Ответить   Fri, 10 Jun 2005 18:12:43 +0400 (#382494)

 

he||o all

- наследует как копию или как ссылки?
- да и почему должны появляться коллизии?
зы: речь вообще идет о бд?

waiting...





библиотекa сайтостроительства http://www.i2r.ru/static/244/

Ответить   "ilya novojilov" Sat, 11 Jun 2005 14:34:56 +0200 (#383147)

 

На самом деле я бы сделал так:

1 таблица имена разделов: у нее 3 основных параметра:
1. номер (id);
2. на какой раздел ссылается (номер id). У
основных разделов этот параметр равен 0;
3.Имя раздела.
2 таблица со значениями: содержит столбец, который указывает на
id-раздела таблицы 1.

При добавлении нового раздела, добавляй его в 1 таблицу, а его номер
по порядку (id) давай как ссылку в таблицу 2. Если хочешь установить
как подраздел, то в (2) укажи id родительского каталога.

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

Ответить   mds_suppo***@m*****.ru Mon, 13 Jun 2005 17:18:25 +0400 (#384189)

 

Привет, MDS.

Так-то оно так и у меня так сделано (нуц почти так у меня еще
несколько полей). Твоя схема тоже не решает проблемы. Мне же нужно
сделать чтобы на раздел добавлялось произвольное количество свойств
товаров, данного раздела. Причем свойства могут быть нескольких типов
- число, строка, перечисляемый тип и т. д. Т. е., например, раздел
"Сотики" и для него задаются свойства: размер, цвет, стандарт, цена
и т. д. А для следующего раздела свойства будут уже другими.
Вот в чем проблема.

Кстати, вопрос, можно к письму присоединять файлик??? Я б тогда
скинул бы получившуюся у меня структуру и все стало бы понятней.

Ответить   Tue, 14 Jun 2005 14:23:50 +0400 (#384619)

 

Привет, Бегемот!

Задумайся хорошенько, надо ли тебе это? Сильно ли надо? Или лучше
обойтись нормальными средствами с фиксированными параметрами и может
быть небольшим количеством свободно задаваемых параметров... Я как-то
пытался подобную программу написать, но это был не MySQL, а Oracle,
что существенно облегчало задачу. Но несмотря на это была куча
геморроя и совершенно неоправданные тормоза в работе программы. А
MySQL еще и не любой SQL-запрос может обрабатывать, не любой
сложности... В общем хорошо подумай, прежде чем делать такое...

Пашка

14 июня 2005 г., 14:23:50, Begemot <begemotina20***@m*****.ru> wrote:





библиотекa сайтостроительства http://www.i2r.ru/static/244/

Ответить   Tue, 14 Jun 2005 14:40:22 +0400 (#384633)

 

Привет, Пашка!
На счет надо ли мне это - НАДО!!! И ОЧЕНЬ сильно! Два слова:
техническое задание. :-)

Ответить   Tue, 14 Jun 2005 15:55:38 +0400 (#384694)

 

Чего-то я не вижу проблемы...

Товары
id | название | что-то ещё |

разделы
id | pid (родительский) | название | что-то ещё |

связь
id | id товара | id раздела |

Или я не понял сути проблемы?

С уважением, Косарев Дмитрий





библиотекa сайтостроительства http://www.i2r.ru/static/244/

Ответить   Tue, 14 Jun 2005 16:20:42 +0400 (#384730)

 

Здравствуйте, Begemot.

Никаких проблем.
Заведи текстовое поле и храни в нём информацию в формате XML. Тогда ты
будешь иметь всё, что захочешь, любого размера и любой структуры.
Не хочешь XML, сделай что-то типа ini-файла:

[Параметр1]
Тип=Целый
ЕдИзм=руб.
Подпись=Цена

[Параметр2]
Тип=Строка
ЕдИзм=
Подпись=Описание товара...

Ответить   Andrey Yakushev Tue, 14 Jun 2005 14:46:12 +0400 (#384640)

 

Андрей, привет!
СУПЕР!!! Спасибо за идею!!! И как сам не додумался... Ты прав с XML
это проблема должна решиться. С завтрашнего дня, наверное, начну
реализовывать, а получится или нет будет видно. Но еще раз спасибо за
идею!

Ответить   Tue, 14 Jun 2005 15:58:05 +0400 (#384697)

 

Андрей, привет!
СУПЕР!!! Спасибо за идею!!! И как сам не додумался... Ты прав с XML
это проблема должна решиться. С завтрашнего дня, наверное, начну
реализовывать, а получится или нет будет видно. Но еще раз спасибо за
идею!

Ответить   Tue, 14 Jun 2005 15:58:05 +0400 (#384698)

 

Здравствуйте, Begemot.

Вы писали 14 июня 2005 г., 15:58:05:

Идея-то лежит на поверхности. Просто когда говорят о данных, имеют в
виду то, что с этими данными должна работать БД, должны делаться
какие-то запросы, какой-то анализ. Если тебе этого не нужно, то
велком! А если придётся эти разношёрстные данные анализировать и по
ним делать запросы, то ты упрёшься головой в небо.

Ответить   Andrey Yakushev Tue, 14 Jun 2005 16:33:46 +0400 (#384733)

 

Здравствуйте, Andrey.

Итак, предлогаю на суд всех читателей, структуру моей базы данных
каталоога товаров.
Напомню ТЗ: в каталоге должны создаваться подразделы бесконечной
вложенности. Для каждого раздела можно задавать произвольное
количество свойств, т. е. при добавлении товара в данный раздел ему
(товару) заполняются поля данных свойств. (получилось сумбурно, но
надеюсь разберете).

И еще маленькое пояснение. База данных MySQL, тип базы данных InnoDB.
Вот здесь-то и возникает колизия... т. к. связи образуют кольцо.
Или я ошибаюсь???

| Category | |Category_option |
|---------------| |----------------|
--| ID |---| |ID |---|
| | Parent_ID | |-----|Cat_ID | |
| | Name | |Title | |
| | Sort | |Type | |
| |_______________| |________________| |
| |
| |
| |
| |
| | Product | | Option(N) | |
| |---------------| |----------------| |
| | ID |---| |ID | |
|-| Cat_ID | |-----|Item_ID | |
| Name | |Option_ID |---|
| Picture | |Type |
| Description | |________________|
| Sort |
|_______________|

Ответить   Wed, 15 Jun 2005 10:15:15 +0400 (#385262)

 

Кручу верчу - запутать хАчу :) Каша.

Какое-то свойство раздела
ID
название

Раздел
ID
ID_свойства_раздела
PID
название

Товар
ID
Название

Таблица, которая всё связывает
id
id раздела
id товара

Оно?

С помощью мускула, на мой взгляд, организовать дерево не возможно. Здесь
должна работать рекурсивная функция, переберая всё в таблице с разделами и
выстраивая дерево.

А вообще, лучше всё это на живом примере привести.

С уважением, Косарев Дмитрий

Исходное сообщение От: "Begemot" <begemotina20***@m*****.ru>
Кому: "inet.webbuild.webbuilding (2109226)" <adm***@e*****.ru>
Отправлено: 15 июня 2005 г. 10:15
Тема: Re[7]: Каталог продукции





библиотекa сайтостроительства http://www.i2r.ru/static/244/

Ответить   Wed, 15 Jun 2005 15:11:35 +0400 (#385298)

 

Привет, Бегемот!

А где значения параметров? А где возможные значения у перечислимого
типа? А еще в Option есть ID и Option_ID. Чем они отличаются? А еще
наверняка есть такая штука, что у числовых типов должны задаваться
границы изменения...

Пашка

15 июня 2005 г., 10:15:15, Begemot <begemotina20***@m*****.ru> wrote:





библиотекa сайтостроительства http://www.i2r.ru/static/244/

Ответить   Wed, 15 Jun 2005 15:54:12 +0400 (#385328)

 

Здравствуйте, Бегемот.

:( Не получил предыдущее письмо (почему-то). Поэтому прочитал по
цитированию...

Не понимаю, зачем так сложно?
У меня всё крутится на двух таблицах:
http://www.kordon-rnd.ru/equipment/

1 - дерево
id int(10) unsigned NOT NULL auto_increment,
id_up int(10) unsigned default NULL,
leaf enum('N','Y') NOT NULL default 'Y',
name varchar(128) NOT NULL default '',
visible enum('N','Y') NOT NULL default 'Y'

2 - описание элементов
id_tree int(10) unsigned NOT NULL default '0',
short varchar(255) NOT NULL default '',
price1 float(15,2) unsigned default NULL,
price2 float(15,2) unsigned default NULL,
price3 float(15,2) unsigned default NULL,
currency tinyint(3) unsigned default NULL,
picture_big blob,
picture_small blob,
producer smallint(5) unsigned default NULL,
link varchar(64) default NULL,
description text,

(На самом деле - 4; там ещё список производителей и список валют). Но
дело не в этом. Дело в том, что каждый элемент дерева может быть либо
веткой, либо листом. Вообще, это легко проверить: делается запрос на
то, ссылается ли кто-нибудь на этот элемент как на родителя. Но это
долго делать при показе. Поэтому я делаю это лишь при вводе или
изменении данных, и устанавливаю флаг leaf. Вот и всё. А вторая
таблица - описание элемента дерева. Вот тут уже ставь, что хочешь. А в
одном из текстовых полей вставляй xml.

Ответить   Andrey Yakushev Wed, 15 Jun 2005 16:15:50 +0400 (#385337)

 

Здравствуйте, Andrey.

Я думаю XML, здесь не подходит... Т. к. в каталоге планируется сделать
сравнение товаров по некоторым параметрам, а с XML'ем, на мой взгляд,
здесь получиться большой геморой.

Ответить   Wed, 15 Jun 2005 18:17:05 +0400 (#385382)

 

Здравствуйте, Begemot.

Если сравнение нужно делать из, скажем, 100 наименований, то нет
ничего сложного прочитать 100 записей, получить 100 xmlек, обработать
их скриптом и выдать результат. Если, конечно, наименований больше, то
придётся просто делать очень широкую таблицу со всеми возможными
вариантами полей-параметров.

Ответить   Andrey Yakushev Wed, 15 Jun 2005 19:22:24 +0400 (#385429)

 

Здравствуйте, Пашка.

Значения параметров храняться в таблицах Option. Таких таблиц семь
(соответственно количеству типов параметров), т. е. таблица string,
int, picture и т. д. Я на схеме их обозначил одной таблицей Option(N)
- рисовать лень было. Я думаю после данного разъяснения сразу
становиться понятным различие между ID и Option_ID. А возможные
значения перечисляемого типа храняться в поле select таблицы
Category_option, я в схеме просто забыл указать данное поле. Это не
очень верно, зато избавляет от лишниш проблем.

Ответить   Wed, 15 Jun 2005 18:33:30 +0400 (#385399)

 

i686-suse-linux)

Hello, Begemot!

On Tue, 14 Jun 2005 14:23:50 +0400 you wrote:

А почему бы не сделать поле типа BLOB, в котором будет описание товара?
К примеру:
Color='красный'
Vendor='Morotola'
Model='С650'

Описания структуры можно положить в отдельную таблицу.
Скажем такого вида:
...
rid INT //id раздела
k VARCHAR ( 20 ) //ключ, к примеру Color, Vendor и т.д.

К примеру имеется раздел с id=1 (мобилы) и раздел с id=2 (одежда) и
такая таблица:
#id key
1 Color
1 Model
1 Vendor
2 Size
2 Vendor
2 Color
2 matherial

Ответить   "B." Wed, 15 Jun 2005 18:21:53 +0400 (#385521)

 

i686-suse-linux)

Hello, Begemot!

On Tue, 14 Jun 2005 14:23:50 +0400 you wrote:

А почему бы не сделать поле типа BLOB, в котором будет описание товара?
К примеру:
Color='красный'
Vendor='Morotola'
Model='С650'

Описания структуры можно положить в отдельную таблицу.
Скажем такого вида:
...
rid INT //id раздела
k VARCHAR ( 20 ) //ключ, к примеру Color, Vendor и т.д.

К примеру имеется раздел с id=1 (мобилы) и раздел с id=2 (одежда) и
такая таблица:
#id key
1 Color
1 Model
1 Vendor
2 Size
2 Vendor
2 Color
2 matherial

Ответить   "B." Wed, 15 Jun 2005 18:21:53 +0400 (#385522)

 

Здравствуйте, Begemot.

А это что значит?

Ответить   Andrey Yakushev Sat, 11 Jun 2005 09:20:35 +0400 (#382941)

 

i686-suse-linux)

Hello, Begemot!

On Fri, 10 Jun 2005 17:46:32 +0400 you wrote:

Какие колизии?

Ответить   "B." Sat, 11 Jun 2005 10:14:38 +0400 (#382959)