Моделирование 2D таблицы в PostgreSQL (Django) - PullRequest
1 голос
/ 08 марта 2020

Так что я хотел бы смоделировать 2D-таблицу в PostgreSQL, а под 2D я имею в виду, что я хотел бы добавить / обновить / удалить как строки, так и столбцы. Прежде чем я действительно углубился в детали, я хотел сказать, что я действительно изучал динамические c Django модели, чтобы я мог расширять модели и добавлять столбцы во время выполнения, но, честно говоря, это похоже на хакерскую работу, и ни один из этих пакетов не имеет хороших документов или не поддерживается на данный момент для последних версий Django и Python. Нет SQL - слишком сложное переключение на столь позднем этапе игры, и оно исключает многие полезные функции Django, такие как ORM и интеграция моделей с DRF.

enter image description here

Например, в этой таблице у меня есть некоторые обязательные поля, такие как название прошивки, к которым я могу добавить publi sh дату или номер сборки или что-то в этом роде. Но у меня также есть заголовки столбцов, которые могут быть добавлены или удалены при выпуске новых версий программного обеспечения, например 4.0.1. Есть ли такой способ моделирования для оптимального создания CRUD API, который позволяет избежать ненужной избыточности?

На данный момент у меня в основном есть следующие модели, но, конечно, хранение номера выпуска несколько раз создает избыточность для каждого столбца. Также делает интерфейс внешнего интерфейса очень запутанным, потому что мне приходится щелкать строку и в основном редактировать каждое значение поддержки одно за другим в модальном режиме, что с точки зрения UX не имеет смысла. Любые идеи будут высоко ценится!

  • Таблица (название, сноски)
  • Строка (имя, дата, сборка и т. Д. c, FK в таблицу)
  • Поддержка (выпуск, значение, FK в ряд)

1 Ответ

2 голосов
/ 08 марта 2020

Наиболее вероятное решение состоит в том, чтобы смоделировать его, используя две модели и отношения «многие ко многим» между ними. Например, версия прошивки <->, если я правильно понимаю ваш пример.

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

Таким образом, вы можете легко добавлять больше прошивок и больше версий.

Некоторые псевдокод:

class Firmware(Model):
    name = StringField()

class Version(Model):
    name = StringField()

class FirmwareVersion(Model):
    firmware = ForeignKey(Firmware)
    version = ForeignKey(Version)
    support = EnumField(["y", "n", "c"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...