Мне нужно хранить некоторые контрольные списки в БД MySql. Это оказывается сложнее, чем ожидалось:
- Существует «основной» контрольный список, который применяется ко всему
- Каждый порт будет ссылаться на основной контрольный список, НО с дополнительными элементами, разбросанными в определенных местах
Моя первоначальная идея - создать таблицу checklists
с полями:
- ID
- описание
- portId (ноль, если это элемент в «общем» контрольном списке)
- положение
Здесь контрольным списком «master» будут элементы с «portId», установленным в null, а контрольными списками, специфичными для порта, будут контрольные списки, для которых portId имеет значение «что-то».
Однако упорядочить вещи в лучшем случае непросто: параметр position является неоднозначным, поскольку он может ссылаться на положение списка, зависящего от порта, но переупорядочение элемента main (не порта) может испортить ситуацию.
Другим вариантом будет связанный список:
- ID
- описание
- portId (ноль, если это элемент в «общем» контрольном списке)
- previousId
Это означает, что каждый элемент будет знать, кто является «родителем».
Это кажется идеальным решением. Однако ... есть проблема с запросами: как написать запрос, чтобы элементы отображались в правильном порядке? (то есть сначала тот, у которого нет идентификатора, затем первый элемент с первой записью в качестве отца и т. д.). Кроме того, я обеспокоен нарушением связанного списка, если что-то пойдет не так.
Есть ли "лучшие практики" для такой проблемы?