Как сохранить контрольный список с заказанными товарами в БД - PullRequest
0 голосов
/ 03 мая 2018

Мне нужно хранить некоторые контрольные списки в БД MySql. Это оказывается сложнее, чем ожидалось:

  • Существует «основной» контрольный список, который применяется ко всему
  • Каждый порт будет ссылаться на основной контрольный список, НО с дополнительными элементами, разбросанными в определенных местах

Моя первоначальная идея - создать таблицу checklists с полями:

  • ID
  • описание
  • portId (ноль, если это элемент в «общем» контрольном списке)
  • положение

Здесь контрольным списком «master» будут элементы с «portId», установленным в null, а контрольными списками, специфичными для порта, будут контрольные списки, для которых portId имеет значение «что-то». Однако упорядочить вещи в лучшем случае непросто: параметр position является неоднозначным, поскольку он может ссылаться на положение списка, зависящего от порта, но переупорядочение элемента main (не порта) может испортить ситуацию.

Другим вариантом будет связанный список:

  • ID
  • описание
  • portId (ноль, если это элемент в «общем» контрольном списке)
  • previousId

Это означает, что каждый элемент будет знать, кто является «родителем». Это кажется идеальным решением. Однако ... есть проблема с запросами: как написать запрос, чтобы элементы отображались в правильном порядке? (то есть сначала тот, у которого нет идентификатора, затем первый элемент с первой записью в качестве отца и т. д.). Кроме того, я обеспокоен нарушением связанного списка, если что-то пойдет не так.

Есть ли "лучшие практики" для такой проблемы?

1 Ответ

0 голосов
/ 10 мая 2018

Ответ так прост, это стыдно. Я подходил к проблеме с неправильной точки зрения и застревал. Вместо того, чтобы думать о проблеме как о «отдельном контрольном списке для последующего слияния», гораздо проще увидеть его как «один большой контрольный список, в котором элементы могут быть отфильтрованы».

Таким образом, я могу просто применить обычный «один вес на поле, определяющий порядок записей» (как это всегда делается, когда у вас есть упорядоченный набор); тогда я просто "отфильтрую" некоторые поля, которые не применимы. Фильтрация может происходить несколькими способами, но это выходит за рамки моего вопроса.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...