Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Помогите с логикой
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Помогите с логикой

Страниц (1): [1]
 

1. Andruxa - 03 Июля, 2011 - 21:50:57 - перейти к сообщению
Всем привет!
Голова кипит от кучи мыслей которые не получается "разложить по полочкам".

Суть задачи. Необходимо реализовать записть объявлений в базу данных. Соответственно категорий и подкатегорий может быть множество.
Есть ли смысл сделать, скажем, для каждого раздела свою таблицу, для каждой категории тоже свою таблицу, для подкатегории тоже свою ?
Были мысли сделать общую таблицу и каждому значению сделать свое поле в таблице, но думаю это не вариант, т.к. для разных категорий объявлений разное кол-во значений будет.
Еще есть мысли, сделать пару полей для того что бы можно было выбирать данные и поле доп. информации в котором данные будут в сериализованном виде храниться.

Как лучше сделать запись в базу объявлений, что бы как можно проще потом вывести это все из базы в зависимости от категорий и подкатегорий?
2. Саныч - 03 Июля, 2011 - 22:03:06 - перейти к сообщению
делаете всего две таблицы: объявления и категории. В объвах делаете все необходимые поля и id категории... В категориях соответственно id и parent_id... В итоге имеем неограниченную вложенность категорий и рассортированные объявы...
3. Andruxa - 03 Июля, 2011 - 22:19:35 - перейти к сообщению
Eсли я правильно понял, делаем таблицу категорий:
PHP:
скопировать код в буфер обмена
  1. CREATE TABLE `categoria` (
  2.   `id` int(11) NOT NULL auto_increment,
  3.   `parent_id` int(11) NOT NULL
  4. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;


Делаем таблицу объявлений:
PHP:
скопировать код в буфер обмена
  1. CREATE TABLE `objava` (
  2.   `id` int(11) NOT NULL auto_increment,
  3.   `id_cat` int(11) NOT NULL
  4.  ......  и еще куча полей.....
  5. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

В том то и вопрос, что если так делать то у меня будет куча полей, т.е возьмем для примера 2 категории (Недвижимость и Автомобили)
Для "Недвижимости" поля будут иметь свою специфику (этаж, из чего стены, параметры и т.п.), соответственно поля для объявлений "Автомобили" будут тоже иметь свою специфику (марка модели, год выпуска, цвет, пробег и прочее). Если все это делать в одной таблице это будет караул Улыбка, может всетаки есть смысл разделить таблицы по катагориям объявлений?
4. White - 03 Июля, 2011 - 22:37:20 - перейти к сообщению
как вариант конечно serialize() всех свойств, хотя мне лично не нравится, лучше связку через id сделать
5. Саныч - 04 Июля, 2011 - 00:19:23 - перейти к сообщению
Andruxa, я вас сразу не понял... так-то да, лучше не делать в одной таблице, т.к. в итоге получится "каша"... Как вариант - предложение White, сделать поле "параметры" и хранить в нем все параметры продукта... Но я б скорей всего такое не выбрал.
Одно дело, если нужно просто хранить и показывать. В этом случае это наилучший вариант.
Другое же дело, когда нужно организовать сортировки всякие и т.д... Но хотя и здесь немного поизвращавшись можно сделать и с serialize.

Мне вот что интересно. Обычно, когда подобное делают, то уже знают специфику товаров, т.е. будут то вещи или недвижимость, или техника, или что-то еще... А у вас это что будет?.. Иил это из серии "торгуем всем и ничем"?

Вобщем я еще немножко подумаю, как лучше это реализовать, но скорей всего самое оптимальное в вашем случае будет использовать предложение White
6. Andruxa - 04 Июля, 2011 - 07:50:36 - перейти к сообщению
Цитата:
как вариант конечно serialize() всех свойств, хотя мне лично не нравится, лучше связку через id сделать

А чем он Вам не нравится ? Работает медленнее или какие то другие причины ?

Цитата:
Мне вот что интересно. Обычно, когда подобное делают, то уже знают специфику товаров, т.е. будут то вещи или недвижимость, или техника, или что-то еще... А у вас это что будет?.. Иил это из серии "торгуем всем и ничем"?


Сначала хотел именно сделать объявления под одну специфику, но потом передумал и хочу сделать объявления по разным темам Улыбка. Специфика будет разнообразная, что то похожее на "торгуем всем" Улыбка
7. morosit - 04 Июля, 2011 - 08:04:00 - перейти к сообщению
Andruxa как вариант
Все объявления хранятся в одной таблице, у каждого объявления максимум, допустим 5 параметров, под именами парам1, парам2, и т.д. Т.е. без специфики в названий полей.
8. Andruxa - 04 Июля, 2011 - 08:36:14 - перейти к сообщению
Цитата:
Все объявления хранятся в одной таблице, у каждого объявления максимум, допустим 5 параметров, под именами парам1, парам2, и т.д. Т.е. без специфики в названий полей.


Думаю может получится Улыбка нужно будет попробовать, спасибо за идею!
9. Саныч - 04 Июля, 2011 - 08:53:21 - перейти к сообщению
Andruxa, я вчера перед сном еще немного подумал над вашей задачей. Вобщем я б сделал так:
1. Первая таблица categories
Поля: id, parent, parameters и далее все необходимые типа название и чето там еще...
2. Вторая таблица products
Поля: id, category, еще всякие типа названий, дат...
3. Третья таблица parameters
Поля: id и опять таки еще типа названия и т.д.
4. Вы (или кто-то другой) как админ, при добавлении новой категории выбираете необходимые параметры (параметры хранятся в таблице parameters). Выбор реализовывается на checkbox-ах... Выбранные значения заносятся в serialize() виде в ячейку parameters таблицы categories
5. Админ может добавлять новые параметры в таблицу parameters (к тому же их будет не так уж и много, к примеру "цвет" будет использоваться и в авто, и в мебели, и в вещах). При добавлении нового параметра добавляется новое поле в таблицу products с префиксом, к примеру, parametr_ и id параметра в таблиц parameters
6. Ну и при добавлении нового товара, сначала выбираем необходимые поля для данной группы товаров и заполняем только их...

В итоге имеем неограниченную вложенность категорий, неограниченное количество параметров для каждой категории... Единственный "минус" это, возможно, слишком большая таблица продуктов... Но этот так... Какая разница, какая там таблица, главное чтоб все работало Улыбка

Ну вот как-то так Улыбка
10. Andruxa - 04 Июля, 2011 - 21:41:56 - перейти к сообщению
Саныч Спасибо за идею, тоже можно попытаться реализовать.
Перечитал раз 20 предложенное Вами, но все равно не совсем въехал.
Интересует этот пункт:
Цитата:
4. Вы (или кто-то другой) как админ, при добавлении новой категории выбираете необходимые параметры (параметры хранятся в таблице parameters). Выбор реализовывается на checkbox-ах... Выбранные значения заносятся в serialize() виде в ячейку parameters таблицы categories

Т.е в таблицу параметры, я внес обобщенно все параметры которых будут касаться моих объявления, так?
А не получится, что при добавлении категории объявления и в момент выбора паметров, у меня появится ОЧЕНЬ много checkbox' сов, которые я устану вибирать. Или я что то не допонял в этом моменте ?
11. Саныч - 04 Июля, 2011 - 22:40:03 - перейти к сообщению
Andruxa пишет:
появится ОЧЕНЬ много checkbox' сов, которые я устану вибирать
вот про это я немного написал в пункте 5 (в скобках)... Предположим у нас есть мебель и авто... Такие параметры как цвет, высота, ширина, длина будут у обоих групп товаров... И таких вариантов много, т.е. это только кажется, что параметров будет много... Да и вобще понятие "много"? В моем понятии это 200 - 300, а в вашем?
К тому же этот выбор придется сделать всего один раз при добавлении категорий, ну и возможно еще пару раз при редактировании... Вобщем, можно и пострадать немного Улыбка
12. DlTA - 04 Июля, 2011 - 22:59:01 - перейти к сообщению
как вариант
таблиц:
"Типы объектов" - автомобили, одежда, ....
"тип свойства" - цвет, число стен, максимальная скорость, размер, ....
"сводная таблица, тип объекта/свойство" - id типа объекта | id типа свойств
"значения свойств" - зеленый, 1985, хлопок, ....
"объекты" - id объекта| id типа объекта | ..........
"сводная таблица, объект/тип свойства/значение" id объекта | id типа свойства | id свойства

надеюсь схема взаимоотношений понятна,
+ таблицы категорий, и свойства для объектов о принадлежности к категории

а вообще для начала стоит определиться с перечнем обязательных свойств объектов и категоирий, я как то считал у меня вышло 11 (видимость товара, цена, описание, краткое описание, ....)
(Добавление)
кстати серелизация светит тормозами когда станет вопрос поиска

да и при обычном отображении товара, для отображения придется делать уйму запросов, а mySQL+php не любят когда много запросов, лучше 1 но большой))

 

Powered by ExBB FM 1.0 RC1