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