PostgreSQL: Как пометить каждую таблицу в моей базе данных? Общие внешние ключи, столбец массива или другой метод

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

Я рассматриваю различные подходы к реализации этой функции и нахожусь в замешательстве относительно лучшего подхода:

  1. Использование Generic Foreign Keys в Django:
    Один из подходов, который я рассматриваю, заключается в использовании функции Generic Foreign Keys в Django для создания универсальной таблицы "Tags", которая может ссылаться на любую другую таблицу в базе данных. Это обеспечивает гибкость и позволяет избежать сложной логики. Однако могут возникнуть такие недостатки, как снижение производительности или база данных не будет иметь смысла без ORM Django.
  2. Ручная реализация в одной таблице, без общих внешних ключей:
    Другой вариант - реализовать таблицу "Tags" вручную , не полагаясь на Generic Foreign Keys в Django. Я бы создал отдельную таблицу, которая может ссылаться на любую другую таблицу в базе данных, но без использования формальных внешних ключей. Это потребует либо хранения некоторой логики в базе данных, либо в бэкенде, что будет сложнее в обслуживании.
  3. Отдельная таблица перекрестных ссылок для каждой таблицы:
    В качестве альтернативы я мог бы создать отдельную таблицу (например, car_tags, house_tags, person_tags) для каждой таблицы в моей базе данных, для которой требуются теги. Такой подход обеспечит четкое разделение и потенциально лучшую производительность, но может привести к избыточности и усложнению запросов и обслуживания.
  4. Добавление столбца tags TEXT[] массива в каждую таблицу:
    Введение
  5. столбца
массива "tags" в каждой таблице, требующей тегирования, вместо того, чтобы поддерживать генерацию

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

Вернуться на верх