powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Задача по проектировани БД.
24 сообщений из 24, страница 1 из 1
Задача по проектировани БД.
    #38706452
Lamer666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Прошу помощи в решении следующей задачи:
Есть склады с товарами
Нужно организовать морфологический поиск товаров на складах с ограничением (например) по 2 позициям, при этом каждый новый морфологический поиск должен исключать ранее выбранные позиции пока не будут отобраны все позиции соответствующие одному и тому же запросу.
Например:
Склад №1, (ФИО ответственного), Вода питьевая «Слеза», цена
Склад №2, (ФИО ответственного), Вода питьевая «Родник», цена
Склад №1,(ФИО ответственного), Вода питьевая «Родник» , цена
Склад №5, (ФИО ответственного), Вода питьевая «Столовая» , цена
Склад №3, (ФИО ответственного), Вода питьевая «Кристалл» , цена
Склад №4,(ФИО ответственного), Вода питьевая «Столовая» , цена
Склад №5,(ФИО ответственного), Вода питьевая «Боржоми» , цена
….
Делаю выборку по ключевым словам «ВОДА» и «ПИТЬЕВАЯ» ограничивая выборку двумя строками:

Первая выборка
Склад №1, (ФИО ответственного), Вода питьевая «Слеза» , цена
Склад №2, (ФИО ответственного), Вода питьевая «Родник» , цена

Во вторую выборку, позиции (Склад №1, (ФИО ответственного), Вода питьевая «Слеза» , цена и Склад №2, (ФИО ответственного), Вода питьевая «Родник» , цена) первой выборки, «как бы» должны встать в очередь в низ:
Склад №1,(ФИО ответственного), Вода питьевая «Родник» , цена
Склад №5, (ФИО ответственного), Вода питьевая «Столовая» , цена
Склад №3, (ФИО ответственного), Вода питьевая «Кристалл» , цена
Склад №4,(ФИО ответственного), Вода питьевая «Столовая» , цена
Склад №5,(ФИО ответственного), Вода питьевая «Боржоми» , цена
----------
Склад №1, (ФИО ответственного), Вода питьевая «Слеза» , цена
Склад №2, (ФИО ответственного), Вода питьевая «Родник» , цена

Затем получаем результат второй выборки в виде:
Склад №1,(ФИО ответственного), Вода питьевая «Родник» , цена
Склад №5, (ФИО ответственного), Вода питьевая «Столовая» , цена

Третья выборка:
Склад №3, (ФИО ответственного), Вода питьевая «Кристалл» , цена
Склад №4,(ФИО ответственного), Вода питьевая «Столовая» , цена

Следующая:
Склад №5,(ФИО ответственного), Вода питьевая «Баржоми» , цена
Склад №1, (ФИО ответственного), Вода питьевая «Слеза» , цена

И так далее, по кругу… каждые ранее отобранные товары становиться в очередь в конце списка.

Мое решение:
Создал таблицу склады:
1. ИндексСклада
2. НазваниеСклада
3. Ответсвенный
Затем таблицу товаров:
1. ИндексТовара
2. ИндексСклада [принадлежность товара складу]
3. НазваниеТовара
4. ЦенаТовара
Пример:
1, Вода питьевая «Слеза», 1(индекс Склада №1), 100р.
2, Вода питьевая «Кристалл», 2(индекс Склада №2), 100р.
3, Вода питьевая «Слеза», 2(индекс Склада №2), 100р.
4, Вода столовая, 3(индекс Склада №3), 50р.
5, Вода туалетная, 3(индекс Склада №3), 70р.
6, Питьевая кружка 4(индекс Склада №3), 5р.
и т.д.
каждый склад может содержать одинаковые марки воды и товары.


Затем для обеспечения морфологического поиска я создал таблицу в которой будут храниться ключевые слова, по которым и будет происходить морфологический поиск.
1. Индекс (пока не знаю, нужен ли цифровой индекс или индексом можно сделать само нормализованное ключевое слово (они не будет повторяться в этой таблице)? Вопрос: «Будет ли падение скорости из-за текстового индекса?»)
2. НормализованноеКлючевоеСлово

Пример:
1,ВОДА
2,ПИТЬЕВАЯ
3,СЛЕЗА
4,РОДНИК
5,КРИСТАЛЛ
6,СТОЛОВАЯ
7,БОРЖОМИ
8,КРУЖКА
9,ТУАЛЕТНАЯ

Далее я создал таблицу связи ИндексогоСлова и Товара
1. Индекс
2. ИндексНормализованноеКлючевоеСлово
3. ИндексТовара
4. СчетчикОтборов

Пример:
1, 1(индекс ВОДА), 1(индекс Вода питьевая «Слеза»), 1
2, 1(индекс ВОДА), 2(Вода питьевая «Кристалл»), 0
3, 1(индекс ВОДА), 3(Вода питьевая «Слеза»), 2
4, 1(индекс ВОДА), 4(Вода столовая),1
5, 1(индекс ВОДА), 4(Вода туалетная),1
6, 2(индекс ПИТЬЕВАЯ), 1(индекс Вода питьевая «Слеза»), 3
7, 2(индекс ПИТЬЕВАЯ), 1(индекс Вода питьевая «Кристалл»), 7
8, 2(индекс ПИТЬЕВАЯ), 1(индекс Питьевая кружка), 4
И т.д.
СчетчикОтборов – нужен мне для того что бы ставить ранее отобранный товар в очередь. Например если товар отобран, то СчетчикОтборов+1. А каждая последующая выборка будет сортироваться по убывания поля «СчетчикОтборов» и ограничиваться двумя строками, таким образом, я всегда буду получать два товара с минимальным счетчиком отбора(которые еще не выбирали). Это обеспечит постановку ранее отобранных товаров вниз по списку.


Проблема №1
При поиске товаров по ключевым словам «ВОДА» и «ПИТЬЕВАЯ» я получу индексы всех товаров, в которых встречается хотя бы одно ключевое слово. Например:

1, 1(индекс ВОДА), 1(индекс Вода питьевая «Слеза»), 1
2, 1(индекс ВОДА), 2(Вода питьевая «Кристалл»), 0
3, 1(индекс ВОДА), 3(Вода питьевая «Слеза»), 2
4, 1(индекс ВОДА), 4(Вода столовая),1
5, 1(индекс ВОДА), 4(Вода туалетная),1
6, 2(индекс ПИТЬЕВАЯ), 1(индекс Вода питьевая «Слеза»), 3
7, 2(индекс ПИТЬЕВАЯ), 1(индекс Вода питьевая «Кристалл»), 7
8, 2(индекс ПИТЬЕВАЯ), 1(индекс Питьевая кружка), 4

Явно строки №5 и 8 меня не устраивает!
При группировке по КЛЮЧЕВЫМ СЛОВАМ, как я понимаю, я буду вынужден отбросить значения индексов таблицы (связи ИндексогоСлова и Товара), а следовательно не смогу увеличить счетчик отбора каждой из позиции для постановки выбранных товаров вниз очереди.

Проблема №2
Даже если выборка получиться, в выборку мне необходимо будет добавить еще данные по складам (Название склада отобранного товара и ответственный по этому складу)

Таким образом, я не умещаюсь в один запрос поиска по ключевым словам «ВОДА» и «ПИТЬЕВАЯ» и с результатом вида:
Склад, Ответственный, ИндексТовара, НаименованиеТовара, СчетчикОтборов

Прощу помощи, может как то перепроектировать структуру? Или есть варианты составления оптимальных по ресурсо-затратам запросов к моей схеме?

Хотелось бы оптимизировать решение задачи под высокую производительность результирующего набора данных!!!
Заранее всем высказавшим свое мнение, подсказавшим правильный «вектор», огромное спасибо.
...
Рейтинг: 0 / 0
Задача по проектировани БД.
    #38711541
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lamer666,

Очевидная уже проблема:

авторЗатем таблицу товаров:
1. ИндексТовара
2. ИндексСклада [принадлежность товара складу]
3. НазваниеТовара
4. ЦенаТовара


Товар не зависит от склада.
Цена товара тоже может не зависить от склада, но може и зависить.
Таблицу надо перепроектировать, разделять на две или более.

То, что ты называешь "морфологический поиск", это полнотекстовый поиск. full text search .
Для его поддержки в MySQL есть специальные полнотекстовые индексы и специальные ключевые слова в SQL.
А ты пытаешься это делать сам руками. Я думаю, вряд ли у тебя получится лучше.
...
Рейтинг: 0 / 0
Задача по проектировани БД.
    #38711542
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сори, я почему-то подумал, что это -- MySQL у тебя.
Но всё равно, полнотекстовый поиск есть во многих СУБД.
...
Рейтинг: 0 / 0
Задача по проектировани БД.
    #38711609
Lamer666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivLamer666,

Очевидная уже проблема:

авторЗатем таблицу товаров:
1. ИндексТовара
2. ИндексСклада [принадлежность товара складу]
3. НазваниеТовара
4. ЦенаТовара


Товар не зависит от склада.
Цена товара тоже может не зависить от склада, но може и зависить.
Таблицу надо перепроектировать, разделять на две или более.

То, что ты называешь "морфологический поиск", это полнотекстовый поиск. full text search .
Для его поддержки в MySQL есть специальные полнотекстовые индексы и специальные ключевые слова в SQL.
А ты пытаешься это делать сам руками. Я думаю, вряд ли у тебя получится лучше.

Имеешь ввиду что лучше сделать: Таблицу товаров, Таблицу складов, Таблицу цен
И затем их связать по индексам в связующих таблицах?
...
Рейтинг: 0 / 0
Задача по проектировани БД.
    #38711610
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lamer666,

да.
...
Рейтинг: 0 / 0
Задача по проектировани БД.
    #38711615
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivОчевидная уже проблема:

авторЗатем таблицу товаров:
1. ИндексТовара
2. ИндексСклада [принадлежность товара складу]
3. НазваниеТовара
4. ЦенаТовара


Да никакой тут проблемы и нету... добавить ещё количество и всё супер...
как на ладони: что, где, почем и сколько...
Единственное - Название товара заменить на индекс из классификатора и всё...

А вот тут http://www.sql.ru/forum/actualfile.aspx?id=16392993
действительно проблема:

- пришел очередной товар с ценой дороже чем такой же предыдущий и переоценивать
нельзя (нужно старый продавать по старой цене, а новый - по новой) и всё... приплыли...
...
Рейтинг: 0 / 0
Задача по проектировани БД.
    #38711656
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag- пришел очередной товар с ценой дороже чем такой же предыдущий и переоценивать
нельзя (нужно старый продавать по старой цене, а новый - по новой) и всё... приплыли...

И как эту проблему будет решать единая таблица с товарами, складами и ценами?
...
Рейтинг: 0 / 0
Задача по проектировани БД.
    #38711690
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинИ как эту проблему будет решать единая таблица с товарами, складами и ценами?

в таблице товар просто появится новая строка с очередным количеством и новой ценой
...
Рейтинг: 0 / 0
Задача по проектировани БД.
    #38711706
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag,

1. Решение, мягко говоря, кривое
2. Ничто не мешает сделать то же самое и в схеме с тремя таблицами.


Мое мнение по поводу решения с тремя таблицами - таблица цен в таком виде, конечно, непонятно что собой символизирует. У товара может быть несколько цен в один и тот же период времени?
...
Рейтинг: 0 / 0
Задача по проектировани БД.
    #38711710
Lamer666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот Матроскинvmag,

1. Решение, мягко говоря, кривое
2. Ничто не мешает сделать то же самое и в схеме с тремя таблицами.


Мое мнение по поводу решения с тремя таблицами - таблица цен в таком виде, конечно, непонятно что собой символизирует. У товара может быть несколько цен в один и тот же период времени?

Как вариант "Закупочная", "Розничная", "Оптовая"
...
Рейтинг: 0 / 0
Задача по проектировани БД.
    #38711716
Lamer666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivсори, я почему-то подумал, что это -- MySQL у тебя.
Но всё равно, полнотекстовый поиск есть во многих СУБД.

Спасибо за подсказку.
Но как решить вопрос выборки (при использовании встроенного механизма полнотекстового поиска) с не повторяющейся выборкой по ключевой фразе?

Например:
Результат выборки "вода питьевая" всего в БД 100 позиций. Мне нужно при первом запросе вида "вода питьевая" отобрать 20 первых строк, при втором запросе "вода питьевая" (это может быть через час, а может через три часа) отобрать следующие 20 строк (исключая строки первой выборки), на следующий день появился третий запрос вида "вода питьевая", я должен отобрать следующие 20 строк из общих 100-а, исключая первые 40 вчерашних строк.

Итак до тех пор, пока не покажу все до одной строки из 100 по 20 строк, и по новому.

Как реализовать сие чудо?
...
Рейтинг: 0 / 0
Задача по проектировани БД.
    #38711718
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lamer666Как реализовать сие чудо?
А очень просто: выбрал 20 - удали их. delete from ... returning. Второй запрос
автоматически их пропустит.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Задача по проектировани БД.
    #38711726
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovА очень просто: выбрал 20 - удали их. delete from ... returning. Второй запрос
автоматически их пропустит.
...
Рейтинг: 0 / 0
Задача по проектировани БД.
    #38711727
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lamer666Итак до тех пор, пока не покажу все до одной строки из 100 по 20 строк, и по новому.

а когда удалишь все, то загружаешь их (все 100) по новой и так в цикле...
...
Рейтинг: 0 / 0
Задача по проектировани БД.
    #38711729
Lamer666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmagLamer666Итак до тех пор, пока не покажу все до одной строки из 100 по 20 строк, и по новому.

а когда удалишь все, то загружаешь их (все 100) по новой и так в цикле...

Это прикол или вы серьезно?
...
Рейтинг: 0 / 0
Задача по проектировани БД.
    #38711730
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lamer666Это прикол или вы серьезно?
Абсолютно серьёзно. Странной задаче - странное решение.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Задача по проектировани БД.
    #38711736
Lamer666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovLamer666Это прикол или вы серьезно?
Абсолютно серьёзно. Странной задаче - странное решение.

А откуда удалять то, если выборка идет из таблицы товаров?
Вариант с сортировкой чем хуже?

PS: (Отобранным позициям таблицы товаров увеличиваем "индекс отбора", следующую выборку делаем с сортировкой по возрастанию "индекса отбора", таким образом в низ будут скапливаться отобранные ранее позиции, сверху (с меньшим индексом "индекс отбора") еще не отобранные)
...
Рейтинг: 0 / 0
Задача по проектировани БД.
    #38711743
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lamer666Кот Матроскинvmag,

1. Решение, мягко говоря, кривое
2. Ничто не мешает сделать то же самое и в схеме с тремя таблицами.


Мое мнение по поводу решения с тремя таблицами - таблица цен в таком виде, конечно, непонятно что собой символизирует. У товара может быть несколько цен в один и тот же период времени?

Как вариант "Закупочная", "Розничная", "Оптовая"

Для этого как минимум нужно поле type в таблице цен
...
Рейтинг: 0 / 0
Задача по проектировани БД.
    #38711745
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lamer666PS: (Отобранным позициям таблицы товаров увеличиваем "индекс отбора", следующую выборку делаем с сортировкой по возрастанию "индекса отбора", таким образом в низ будут скапливаться отобранные ранее позиции, сверху (с меньшим индексом "индекс отбора") еще не отобранные)

не забудь в своем случае каждому новому пользователю добавлять свой персональный индекс для просмотра....

а то чё - ты мля посмотрел свои первые 20 строк и пометил их, а я чё - если зайду буду смотреть со строки 21 ??? так не честно.... я тоже хочу посмотреть первые 20... и вася тоже захочет и петя.... чё им смотреть с конца чо ль.... лучше тогда сразу смотреть на конец....
...
Рейтинг: 0 / 0
Задача по проектировани БД.
    #38712217
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 03.08.2014 22:59, Lamer666 wrote:

> Спасибо за подсказку.
> Но как решить вопрос выборки (при использовании встроенного механизма
> полнотекстового поиска) с _*не повторяющейся выборкой*_ по ключевой фразе?

Сначала тебе нужно спроектировать структуру БД, а потом уже думать о
запросах.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Задача по проектировани БД.
    #38712219
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 04.08.2014 00:06, Lamer666 wrote:

> Итак до тех пор, пока не покажу все до одной строки из 100 по 20 строк,
> и по новому.
>
>
>
> а когда удалишь все, то загружаешь их (все 100) по новой и так в цикле...

> Это прикол или вы серьезно?

Шутка, естественно. Видимо, это был сарказм по поводу очень большого
кол-ва строк с товарами в твоей БД. ДОлжна быть одна строка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Задача по проектировани БД.
    #38712234
Триггерман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lamer666,

А что это за таблица там у тебя " ОстаткиНасклодах " ?
Вот с этого вот неумения элементарно написать слово без ошибок и начинается форменное рас%#$дяйство.
...
Рейтинг: 0 / 0
Задача по проектировани БД.
    #38712239
Триггерман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lamer666,

Столбец " НаваниеСклада " из той же оперы.
Представляю, что за БД ты там на%#евертишь.
...
Рейтинг: 0 / 0
Задача по проектировани БД.
    #38712556
babona
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в говноВУЗах и ПТУ не преподают теорию баз данных
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Задача по проектировани БД.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]