Я работаю над проектом, где у меня есть следующие (отредактированные) структуры таблиц: (MySQL)проектирование базы данных для мечения нескольких источников (MySQL)
Blog
id
title
description
Episode
id
title
description
Tag
id
text
Идея заключается в том, что метки могут быть применены к любой блог или эпизод (и другим типам источников), теги могут быть созданы пользователем, если он еще не существует в таблице тегов.
Цель тегов заключается в том, что пользователь сможет выполнять поиск на сайте, а результаты будут искать все типы материалов на сайте. Кроме того, в нижней части каждой статьи/эпизода блога у него будет список тегов для этого элемента.
Я слишком много думал о механизме поиска, но я предполагаю, что он будет гибким между поисками OR и AND, если это имеет какое-то влияние на выбор и, вероятно, позволит пользователю фильтровать результаты для определенных типов источников.
Первоначально я планировал создать несколько таблиц отображения тегов:
BlogTag
id
tag_id
blog_id
EpisodeTag
id
episode_id
tag_id
Но теперь мне интересно, если я был бы лучше с:
TaggedStuff
id
source_type
source_id
tag_id
Где source_type будет целое число, связанные с ли это был эпизод, блог или какой-то другой тип, который я не включил в структуры выше, а source_id будет ссылкой в этой конкретной таблице.
Мне просто интересно, какая оптимальная структура будет для этого, первый выбор или второй?
У меня такое чувство, что это путь для меня. Начните с этого в качестве базы, так как это будет «правильный» нормализованный дизайн, а если/когда дело доходит до повышения эффективности системы, я могу начать искать способы ее ускорения. –
Да, как я написал в другом ответе в другом месте, есть три основные понятия, как создавать таблицы для обобщения. Но наиболее распространенным является наличие собственных таблиц для типа обобщения и всех подтипов. У этого есть много преимуществ, но также и несколько недостатков, таких как больше JOINs (возможно, замедление вещей), и немного сложнее получить всю вашу сущность, когда вы знаете только первичный ключ из обобщения. (-> С какой таблицей мне нужно присоединиться тогда? Эпизод или блог?) Другим способом легко, хотя и это то, что вы часто делаете. –