powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Система приоритетов
25 сообщений из 63, страница 1 из 3
Система приоритетов
    #34238649
meph
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, всезнающий Олл!
Помогите с простой задачкой, никак не могу придумать стоящее решение.
Все просто: каталог есть айтемов, нужно создать систему приоритетов для них на уровне БД.
То есть табличка из трех полей: id, item, prior.
Первое что приходит в голову это ORDER BY prior, где prior уникальное. Но как тогда заставить все это вставить запись в середину таблицы и при этом не перешерстить половину записей?
Заранее благодарен!
...
Рейтинг: 0 / 0
Система приоритетов
    #34238686
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какое СУБД Вы используете? Для большинства СУБД нет понятия "середина/начало/конец таблицы" (таблица - множество записей). Т.е. при вставке записи никто/ничто не будет "шерстить половину записей" (структура индексов - древовидная, глубина примерно одинакова для всех записей).
Осмысленным может быть, например, "середина/начало/конец выборки с таким-то ORDER BY..."
...
Рейтинг: 0 / 0
Система приоритетов
    #34238694
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mephПервое что приходит в голову это ORDER BY prior, где prior уникальное.
Или проблема в другом? в том, что при одинаковых значениях prior теряется однозначность?
...
Рейтинг: 0 / 0
Система приоритетов
    #34238700
meph
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В данном случае конкретизировать СУБД нет смысла. Возможно Вы неправильно меня поняли. Под емким понятием "шерстить" я имел в виду тот факт, что, возможно, прийдется изменять поле prior в половине строк таблицы. Как избежать этого? Какой использовать алгоритм для поля prior, чтобы затрачивать как можно меньше обращений к базе?
...
Рейтинг: 0 / 0
Система приоритетов
    #34238703
meph
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LRИли проблема в другом? в том, что при одинаковых значениях prior теряется однозначность?
Естественно, что prior должно быть уникально для однозначного формирования упорядоченного списка
...
Рейтинг: 0 / 0
Система приоритетов
    #34238740
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> нужно создать систему приоритетов для них на уровне БД

Задачу полностью сформулируйте.
...
Рейтинг: 0 / 0
Система приоритетов
    #34238742
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Навскидку, пошел бы путем разрешения коллизии одинаковых значений prior - добавил бы еще одно поле (с автоматически генерируемым значением при вставке а возможно и обновлении - identity или timestamp или просто дата-время или другое но такое, чтобы пара значений prior + еще_одно_поле было уникальным), которое бы и использовал в
ORDER BY prior, еще_одно_поле asc|desc
...
Рейтинг: 0 / 0
Система приоритетов
    #34238745
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
Можно уточнить?
Имеется ввиду, что нужно хранить в базе упорядоченный список с поддержкой операций
- Вставить после
- Вставить до
с указанием элемента. Конкретные значения prior не важны. Приоритет должен быть уникальным.
Сразу вопрос: как вы будете использовать значение приоритета? Вым нужен будет порядковый номер элемента в списке. Или только ответ на вопрос, какой элемент приоритетней?
...
Рейтинг: 0 / 0
Система приоритетов
    #34238753
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пояснию, что хотел сказать автор топика:

Есть таблица

Строка Приоритет
1 1
2 2
3 3
4 4
5 5

А теперь добавим строку между 2 и 3, какое значение указать? 2 или 3 или 2,5?
Самый простой способ это проапдейтить поле Приоритет увеличив его на единицу
в тех строках, где приоритет более 2, т.е. 3 строки (больше половины всех записей)
...
Рейтинг: 0 / 0
Система приоритетов
    #34238774
meph
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
?Можно уточнить?
Имеется ввиду, что нужно хранить в базе упорядоченный список с поддержкой операций
- Вставить после
- Вставить до
с указанием элемента. Конкретные значения prior не важны. Приоритет должен быть уникальным.
Сразу вопрос: как вы будете использовать значение приоритета? Вым нужен будет порядковый номер элемента в списке. Или только ответ на вопрос, какой элемент приоритетней?
нужна одна операция всего лишь: выборка и вывод элементво по приоритету.
Думаю, что если это реализовать, то остальное будет не проблема
...
Рейтинг: 0 / 0
Система приоритетов
    #34238778
meph
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Old NickПояснию, что хотел сказать автор топика:

Есть таблица

Строка Приоритет
1 1
2 2
3 3
4 4
5 5

А теперь добавим строку между 2 и 3, какое значение указать? 2 или 3 или 2,5?
Самый простой способ это проапдейтить поле Приоритет увеличив его на единицу
в тех строках, где приоритет более 2, т.е. 3 строки (больше половины всех записей)
Идея правильная у Вас, но боюсь, что реализация такая неуместна. Как Вы сами видите, Ваш вариант не работает. Конечно же апдейтить все поля с большим/меньшим приоритетом при добавлении одного лишь элемента это не выход.
...
Рейтинг: 0 / 0
Система приоритетов
    #34238784
Фотография www.dkoh.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Example

Prvaja zapis' vstavljaetsja s prioritetom ravnym polovine maximal'nogo znachenija polja, naprimer pust' max znachenie dlja Priority budet 2 000 000 000

togda

Item_ID,Priority

0,1 000 000 000

1.Dobavljaem zapis' s prioritetom bol'she chem u Item_ID(0).

Priority= Item_ID(0).Priority+(Max.znachenie polja- Item_ID(0).Priority)/2
t.e Item_ID(1).Priority = 1 000 000 000 + (2 000 000 000 - 1 000 000 000)/2 = 1 500 000 000

2.Dobavljaem zapis' s prioritetom bol'she Item_ID(0) , no men'she Item_ID(1).

Nahodim naibol'shee znachenie Priority mezhdu zadannymi granicami. V nashem sluche eto budet 1 000 000 000 .

t.e Item_ID(2).Priority = 1 000 000 000 + (1 500 000 000 - 1 000 000 000)/2 = 1 250 000 000



Nu i tak dalee.

U etogo podhoda ets' ochevidnye ogranichenija, no on prost v realizacii.

Izvinite za sumburnoe objasnenie. S Novym Godom.
...
Рейтинг: 0 / 0
Система приоритетов
    #34238788
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я привел не решение, а пояснил вопрос автора топика.

Я такое решение использую, но только когда колчиество записей на экран входит

А вообще с проблемой автора топика я не сталкивался, видимо криво не проектировал ещё
...
Рейтинг: 0 / 0
Система приоритетов
    #34238833
meph
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
www.dkoh.netExample
Prvaja zapis' vstavljaetsja s prioritetom ravnym polovine maximal'nogo znachenija polja
...
S Novym Godom.
Такой вариант был рассмотрен давно, но в несколько иной интерпритации: просто делать равные промежутки между записямии перемещать записи в пределах этих промежутков. Но Вы сами понимаете, что этот метод будет работать до некоторого момента, пока все не завалится окончательно. Да и об отимальности тут говорить не приходится...Спасибо за вариант, ждем еще предложений. Вас также с наступившим!
...
Рейтинг: 0 / 0
Система приоритетов
    #34238837
meph
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Old NickА вообще с проблемой автора топика я не сталкивался, видимо криво не проектировал ещё
Спасибо за участие, но зачем же обижаться? И где тут кривизна проетирования? Это тривиальная задача: вывести записи в определенном порядке, а не подряд :) Ну и некоторый механизм регулирования этого порядка.
...
Рейтинг: 0 / 0
Система приоритетов
    #34238859
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Old NickА теперь добавим строку между 2 и 3, какое значение указать? 2 или 3 или 2,5?
вариант 2,5
www.dkoh.netU etogo podhoda ets' ochevidnye ogranichenija, no on prost v realizacii.
его можно слегка переиначить(технически) - сделать поле prior строковым типом, и тогда между "2" и "3" указывать "29", между "2" и "29" - "28", а между "29" и "3" - "299" и т.д., т.е. к "строке сверху" добавляем символ - максимальный из возможных в данном месте для сортировки. Сортировка по строковому типу даст нужный порядок.
В таком случае ограничение останется только на размер строкового поля. Ряд символов конечно же целесообразно расширить.
...
Рейтинг: 0 / 0
Система приоритетов
    #34238866
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> И где тут кривизна проетирования?

В неестественности задачи. Очень напоминает удаление гланд через задний проход.
...
Рейтинг: 0 / 0
Система приоритетов
    #34238942
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621 wrote:
> > И где тут кривизна проетирования?
>
> В неестественности задачи. Очень напоминает удаление гланд через задний
> проход.
Очень напоминает user defined sorting
ну нравится юзверю, чтобы после "промокашки" в каталоге были "букашки",
а потом решил он между "промокашками" и "букашками" вставить
"арбузики"... А потом решил пересортировать.... Чего бы и нет?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Система приоритетов
    #34238957
миллионер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сколько миллионов записей предполагается в каталоге?
...
Рейтинг: 0 / 0
Система приоритетов
    #34238967
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Чего бы и нет?

Ну потому что глупость невероятная. Экзотическую сортировку если и делать, то используя правила, а не уникальные последовательности. Как справедливо заметил Old Nick, нафиг не упиралось такое ранжирование для количества элементов большего, чем умещается на одном экране. Не очевидно?
...
Рейтинг: 0 / 0
Система приоритетов
    #34239107
Aleah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621 Ну потому что глупость невероятная. Экзотическую сортировку если и делать, то используя правила, а не уникальные последовательности.

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

guest_20040621
Как справедливо заметил Old Nick, нафиг не упиралось такое ранжирование для количества элементов большего, чем умещается на одном экране.

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

P.S. а какова табличка по размеру?
...
Рейтинг: 0 / 0
Система приоритетов
    #34239207
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621> И где тут кривизна проетирования?

В неестественности задачи. Очень напоминает удаление гланд через задний проход.
задача то естественна, весь Activity Management пестрит такими задачами :) Все в строго заданном порядке, никаких сортировок по условиям и т.п.

meph, все способы имеют свои ограничения. Мы пересчитываем. Правда работаем с иерархическими структурами и пересчитывается только один уровень. Для больших линейных списков это конечно не выход. Но к сож. в рсубд записи - куча, а не упорядоченный список. На объектных субд было получше в этом плане.
...
Рейтинг: 0 / 0
Система приоритетов
    #34239244
meph
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Табличка небольшая будет - тысяч на десять, но так как использовать этот механизм предпологается в разных проектах, то возможно и до 100 000 дотянет. Все же 50 000 апдейтов делать не очень хочется. Хотелось бы сделать, так чтобы потом система не легла в один прекрасный момент.
Для тех кому слишком интересно зачем такое понадобилось, самый просто пример: каталог товаров, где владелец может некоторые товары выводить в начале.
...
Рейтинг: 0 / 0
Система приоритетов
    #34239266
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mephкаталог товаров, где владелец может некоторые товары выводить в начале.
мы присваиваем в подобных случаях товару категорию (типа ABC).. порядок внутри категории в этом случае не столь важен, главное чтобы товары А были вверху списка.
...
Рейтинг: 0 / 0
Система приоритетов
    #34239278
meph
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iscrafmмы присваиваем в подобных случаях товару категорию (типа ABC).. порядок внутри категории в этом случае не столь важен, главное чтобы товары А были вверху списка.
Вот это уже ближе. Осталось только придумаьт такой механизм, который был бы применим для ВСЕХ товаров, а не для пары-тройки самых важных. Например, чтобы была возможность сегодня выводить колбасу за сыром, но перед рыбой, а завтра все в обратном порядке.
з.ы. думаю все уже давно поняли, что требуется получить на выходе...
...
Рейтинг: 0 / 0
25 сообщений из 63, страница 1 из 3
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Система приоритетов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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