Мое приложение обрабатывает отношения «многие к одному» между пакетами и документами. Пакет содержит несколько документов. В настоящее время они хранятся в базе данных PostgreSQL с использованием таблиц package
и document
, где таблица document
имеет столбец внешнего ключа package-id
.
Новое требование требует, чтобы пользователь мог изменять порядок документов в пакете, поэтому мне нужно начать это отслеживать. Обратите внимание, что порядок сортировки не зависит от какого-либо свойства документа, например даты; он может произвольно назначаться и переназначаться пользователем. Мне нужно определиться с вариантами. Вот те, которые кажутся не ужасными:
package-id
, document-id
, sequence
.package
, чтобы перечислить порядок (меньше изменений в структуре, но теперь у нас есть связи, указывающие в обоих направлениях)Это должен быть общий сценарий – каков стандартный способ его структурирования?
Edit нашел хорошее решение для генерации строк, которые сортируются между другими строками, чтобы избежать коллизий. Мы будем использовать это вместе с новым столбцом последовательности в таблице документов. Возвращает новую строку, которая сортируется между двумя заданными строками
также было бы достаточно иметь таблицу с идентификатором пользователя, уникальным идентификатором документа и номером заказа в следующей таблице, остальная информация может быть объединена с другими таблицами.
Если один пользователь сортирует его, будет ли он повторно сортироваться для всех остальных пользователей? Или у каждого пользователя своя уникальная сортировка? Если есть только один сорт, то самое простое решение — изменить таблицу documents
, в которой уже есть ссылка на пакет. Вы также можете добавить туда порядковый номер или номер сортировки (фактически говоря, что этот документ находится в этом пакете в этой позиции). Если вам нужны разные сортировки для разных пользователей, вам понадобится отдельная таблица с идентификатором пакета, идентификатором пользователя, идентификатором документа и номером последовательности/сортировки. Однако это усложняется с новыми пользователями / теми, кто еще не разобрался.
Спасибо за предложения. В моем случае порядок сортировки привязан к пакету и не зависит от пользователя.
Тогда я изменю это на ответ.
Как обсуждалось в комментариях, необходима только одна сортировка (например, одна и та же сортировка применяется ко всем пользователям).
Поэтому самое простое/простое решение — изменить таблицу документов.
Однако предстоит решить еще множество вопросов.
NOT NULL
)?
Наконец, в некоторых реализованных мной реализациях сортировка была своего рода «надстройкой» для подмножества данных. В таких случаях я создавал отдельную таблицу (эквивалентную идентификатору пакета, идентификатору документа и порядковому номеру), чтобы сохранить исходные данные в первозданном виде. Но это скорее стилистическое/обслуживающее решение, чем простое. (Технически я сделал так, чтобы ее было проще всего игнорировать и удалить позже, поскольку ничто другое не будет использовать эту новую таблицу).
нет, это не обычное явление, так как таблица не имеет значения bx