|
|
|
Помогите с проектированием БД или просто нужен хитрый запрос.
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Помогите пожалуйста с таким вопросом. Проектирую небольшой каталог товаров. Прилагаю схему БД. Есть таблица свойств "katalog_prop". Например есть свойство у товара "Размер экрана". Есть таблица со значениями для свойства "katalog_prop_value". Например "10 дюймом, 11 дюймов, 14 дюймов" и т.д.. Есть таблица с категориями "katalog_prop_cat" для которых определённые свойства используются. Вот тут я упёрся в тупик в котором уже вторую неделю хожу. Например есть свойство которое используется в двух категориях "Телефоны" и "Ноутбуки" и пользователь вдруг решает удалить одну категорию у свойства, например "Телефоны". Далее по логике мне нужно снести все свойства у позиции для этой категории. Да с этим проблем нет. Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2015, 12:53 |
|
||
|
Помогите с проектированием БД или просто нужен хитрый запрос.
|
|||
|---|---|---|---|
|
#18+
Но в то же время сама позиция может относится к категориям "Телефоны" и "Ноутбуки" и получается что что свойства для категории "Ноутбуки" удалять не нужно. Тут может быть какой то хитрый запрос с проверкой нужен. Спасибо. Очень надеюсь на Вашу помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2015, 12:59 |
|
||
|
Помогите с проектированием БД или просто нужен хитрый запрос.
|
|||
|---|---|---|---|
|
#18+
dok11Но в то же время сама позиция может относится к категориям "Телефоны" и "Ноутбуки" и получается что что свойства для категории "Ноутбуки" удалять не нужно. Тут может быть какой то хитрый запрос с проверкой нужен. Спасибо. Очень надеюсь на Вашу помощь. Решение в лоб - "двух-этажный" запрос: 1. Выбираете все позиции, у которых категория "Ноутбуки" 2. В Ваш запрос в условие "где" добавляете " и не в списке", подставляя таблицу, полученную на первом "этаже" (результатом запроса всегда является таблица...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2015, 13:15 |
|
||
|
Помогите с проектированием БД или просто нужен хитрый запрос.
|
|||
|---|---|---|---|
|
#18+
А ты не пытайся всё завернуть в один запрос и задача существенно упростится. Делай процедуру, которая пробежится по выборке свойств, принадлежащих данной удаляемой категории, и удалит все значения этих свойств, а потом и сами свойства. Всё: один мегахитрый запрос распался на три тривиальных. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2015, 13:15 |
|
||
|
Помогите с проектированием БД или просто нужен хитрый запрос.
|
|||
|---|---|---|---|
|
#18+
Prog_95, автор1. Выбираете все позиции, у которых категория "Ноутбуки" Да в том то и дело что я заранее не знаю в каких ещё категориях состоят позиции. Ведь позиций много и позиции могут относиться к нескольким категориям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2015, 14:27 |
|
||
|
Помогите с проектированием БД или просто нужен хитрый запрос.
|
|||
|---|---|---|---|
|
#18+
dok11Prog_95, автор1. Выбираете все позиции, у которых категория "Ноутбуки" Да в том то и дело что я заранее не знаю в каких ещё категориях состоят позиции. Ведь позиций много и позиции могут относиться к нескольким категориям. Тогда на первом этапе запрос немного усложнится: нужно выбрать все позиции у которых есть категория "Телефоны" (та, которая удаляется) И какие-нибудь другие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2015, 14:35 |
|
||
|
Помогите с проектированием БД или просто нужен хитрый запрос.
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovА ты не пытайся всё завернуть в один запрос и задача существенно упростится. Делай процедуру, которая пробежится по выборке свойств, принадлежащих данной удаляемой категории, и удалит все значения этих свойств, а потом и сами свойства. Всё: один мегахитрый запрос распался на три тривиальных. Дело в том, что выборка одним запросом практически всегда и во всех СУБД является на порядок (а иногда и два-три порядка) более быстрой... А умение составлять запросы SQL - так называемое "мышление множествами" - это увлекательная гимнастика для ума... (понимаю, что не для всех...( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2015, 14:39 |
|
||
|
Помогите с проектированием БД или просто нужен хитрый запрос.
|
|||
|---|---|---|---|
|
#18+
Prog_95Дело в том, что выборка одним запросом практически всегда и во всех СУБД является на порядок (а иногда и два-три порядка) более быстрой... Вот только бредить не надо. Если у MS SQL безбожно тормозит работа с курсорами, это не повод обобщать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2015, 14:48 |
|
||
|
Помогите с проектированием БД или просто нужен хитрый запрос.
|
|||
|---|---|---|---|
|
#18+
Вот тут вы нас обманываете: авторНапример есть свойство которое используется в двух категориях "Телефоны" и "Ноутбуки" и пользователь вдруг решает удалить одну категорию у свойства Нужно подправить структуру БД. По задаче категории свойств katalog_prop_cat должны соотноситься с категориям товаров katalog_cat . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2015, 15:02 |
|
||
|
Помогите с проектированием БД или просто нужен хитрый запрос.
|
|||
|---|---|---|---|
|
#18+
katalog_prop_cat - не совсем пойму зачем.. Свойства katalog_prop должны соотноситься с категориями товаров katalog_cat прямо или косвенно. Связав таблицы(многие-ко-многим), можно будет ответить на вопрос: какие свойства относятся к данной категории товаров? . Пока это не очевидно,на данный момент связь производится непосредственно через товары, если правильно понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2015, 15:21 |
|
||
|
Помогите с проектированием БД или просто нужен хитрый запрос.
|
|||
|---|---|---|---|
|
#18+
Ребят спасибо кто откликнулся. Я сегодня на работе (ночью) более подробно опишу мою трудность наверное в картинке всё визуально изображу и завтра утром вложу. А то я наверное не совсем чётко описал проблему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2015, 15:55 |
|
||
|
Помогите с проектированием БД или просто нужен хитрый запрос.
|
|||
|---|---|---|---|
|
#18+
dok11, Сдаётся мне, что БД спроектирована не правильно, отсюда и траблы с запросами. На первый взгляд: 1. Определись с именованием таблиц - у тебя вырви-глаз, а не наименования, даже смотреть не приятно. 2. В таблицах связи отношений М-то-M(katalog_cat_add, katalog_prop_add, katalog_prop_cat) поле ID не нужно. 3. Через таблицу katalog_prop_cat у тебя образуется кольцо на схеме, хотя на схеме это и не указано, но судя по логике у тебя соединяются по двум путям таблицы catalog_prop и catalog_cat - а " это залёт, боец! " В общем, прежде чем разбираться с "хитрым запросом", сделай нормальную БД, тогда и хитрые запросы не понадобятся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2015, 18:27 |
|
||
|
Помогите с проектированием БД или просто нужен хитрый запрос.
|
|||
|---|---|---|---|
|
#18+
feomatrkatalog_prop_cat - не совсем пойму зачем.. Более подробно ниже что зачем.. zeon11Сдаётся мне, что БД спроектирована не правильно, отсюда и траблы с запросами. На первый взгляд: 1. Определись с именованием таблиц - у тебя вырви-глаз, а не наименования, даже смотреть не приятно. 2. В таблицах связи отношений М-то-M(katalog_cat_add, katalog_prop_add, katalog_prop_cat) поле ID не нужно. 3. Через таблицу katalog_prop_cat у тебя образуется кольцо на схеме, хотя на схеме это и не указано, но судя по логике у тебя соединяются по двум путям таблицы catalog_prop и catalog_cat - а "это залёт, боец!" 1. Да, согласен, может быть, но как всегда бывает начнёшь что нибудь проектировать - быстро назовёшь таблицы, мол потом переименую, а потом уже в во всех местах времени нет править. 2. Да, согласен я об этом знаю, не помню зачем мы вводили ID шники, но для чего-то они использовались, и пока не мешают. При конечной отладке может и уберём. 3. Не совсем понял, эти таблицы во общем то к друг другу не имеют отношения. zeon11В общем, прежде чем разбираться с "хитрым запросом", сделай нормальную БД, тогда и хитрые запросы не понадобятся. Да я и прошу помощи по этому вопросу. Не подумайте что я хочу готовое решение на халяву, просто хоть направьте в нужную сторону как правильно нужно сделать, больше просто неукого спросить, а сам я реально не могу сообразить. Что интересно видел похожий движок инет магазина, они там вообще всё в базе оставляют, то есть удалили свойство, а значения сами в БД зависли (записи призраки) :). Движок то популярный, а такие косяки... Теперь еще раз попробую объяснить. Таблица "katalog_data" это сам товар в каталоге. Таблица "katalog_cat" это категории каталога. Таблица "katalog_cat_add" это таблица связи Позиция каталога - Категории , то есть товар может одновременно относится к нескольким категориям (виден в них). Всё это пока оставим. Здесь всё просто. Далее... Приложена картинка которая объясняет свойства товара и зачем они нужны и т.д.. Да, ещё есть таблица "katalog_prop_add" которая хранит значения выбранных свойств для определённой позиции. id_data - это ID товара id_prop - это ID свойства (родитель значения) id_val_prop - это значение свойства из таблицы "id_prop_value" Далее.. теперь на время оставим связи таблиц. Просто логика: 1. Если чел. удаляет всё свойство из системы, то мы сносим из таблицы "katalog_prop_add" все записи для id_prop, ну с остальных таблиц тоже легко всё почистить. 2. Если чел. удаляет значения из свойства тоже легко всё чиститься из всех таблиц. И т.д. Теперь то до чего я не могу допетрить. Допустим у нас есть товар "Музыкальный центр" который одновременно относится к примеру к 2-ум категориям "Теле Аудио Видео" и "Бытовая техника". У него могут быть и другие категории это не важно по сути. И вдруг чел. решает у свойства "Мощность прибора" удалить категорию "Теле Аудио Видео". Соответственно по логике нужно снести для товара из таблицы "katalog_prop_add" все значения этого свойства. Да, нет пока с этим проблем. Код: sql 1. 2. 3. НО товар также ещё относиться и к категории "Бытовая техника" для которого это свойство ещё актуально, и по сути в данном случае значения свойств пока сносить не нужно. Вот как проверить этот момент? Блин объяснил как мог, помогите хоть чем сможете, я уже скоро с катушек съеду. Даже если не в 1 запрос, а 2-3, но как это можно проверять? Или в натуре со структурой БД как то по другому делать. Заранее Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2015, 16:25 |
|
||
|
Помогите с проектированием БД или просто нужен хитрый запрос.
|
|||
|---|---|---|---|
|
#18+
dok11Вот как проверить этот момент? Код: sql 1. 2. 3. 4. То есть удалить все значения свойств удаляемой категории для которых у товаров нет другой категории кроме заданной. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2015, 17:16 |
|
||
|
Помогите с проектированием БД или просто нужен хитрый запрос.
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Код: sql 1. 2. 3. 4. То есть удалить все значения свойств удаляемой категории для которых у товаров нет другой категории кроме заданной. Очуметь, я даже представить не мог что так можно делать, спасибо, вот так вроде то что нужно: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Спасибо, похоже нужно sql подтянуть ещё в плане изучения. Буду ещё тестировать всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2015, 22:35 |
|
||
|
Помогите с проектированием БД или просто нужен хитрый запрос.
|
|||
|---|---|---|---|
|
#18+
А вот еще вопрос, маленько не по теме. При редактировании товара приходится проверять какие свойства: 1. Какие остались - Обновить. 2. Какие удалили - Снести. 3. Какие добавили Добавить. Довольно много движухи. Можно просто полностью сносить все свойства у товара и добавлять по новой - ЧТО ГОРАЗДО ПРОЩЕ. Вот посчитал что - если даже в базу будет залетать в секунду по записи, то за 100 лет это 3153 600 000 записей что намного меньше числа поля BIGINT unsigned (18446744073709551615) Так может не парится - и делать как проще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2015, 10:01 |
|
||
|
Помогите с проектированием БД или просто нужен хитрый запрос.
|
|||
|---|---|---|---|
|
#18+
dok11, Иная простота хуже воровства. Это не красиво, а значит не правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2015, 13:37 |
|
||
|
Помогите с проектированием БД или просто нужен хитрый запрос.
|
|||
|---|---|---|---|
|
#18+
не жадничай. Сделай не M:M а 1:М для свойств. Будет "размер экрана монитора" и "размер экрана телефона" а иначе юзеры озвереют выбирать в списке мощности из "20 wt, 100 wt pmpo, 10 KWt, 125 л.с." и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2015, 13:43 |
|
||
|
Помогите с проектированием БД или просто нужен хитрый запрос.
|
|||
|---|---|---|---|
|
#18+
zeon11Иная простота хуже воровства. Это не красиво, а значит не правильно. ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2015, 14:56 |
|
||
|
Помогите с проектированием БД или просто нужен хитрый запрос.
|
|||
|---|---|---|---|
|
#18+
Ivan Durakне жадничай. Сделай не M:M а 1:М для свойств. Будет "размер экрана монитора" и "размер экрана телефона" а иначе юзеры озвереют выбирать в списке мощности из "20 wt, 100 wt pmpo, 10 KWt, 125 л.с." и т.п. Ну так и есть. Можно же зависти разные свойства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2015, 14:57 |
|
||
|
Помогите с проектированием БД или просто нужен хитрый запрос.
|
|||
|---|---|---|---|
|
#18+
dok11Ivan Durakне жадничай. Сделай не M:M а 1:М для свойств. Будет "размер экрана монитора" и "размер экрана телефона" а иначе юзеры озвереют выбирать в списке мощности из "20 wt, 100 wt pmpo, 10 KWt, 125 л.с." и т.п. Ну так и есть. Можно же зависти разные свойства. ну и заводи. Только не как "можно", а как "нужно" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 01:07 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=24&tid=1540679]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 157ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...