tl; dr: наследование - это неправильный инструмент. Тег является тегом является тегом. Наследование по своей природе обеспечивается использованием нескольких ассоциаций (многие-ко-многим).
Ваше наследство по сути говорит: есть два разных типа тегов, которые существенно различаются. Один тег, который можно применять к сообщениям, и один тег, который можно применять к комментариям, и это не те же теги, а разные теги.
Поскольку оба вида тегов хранятся в одной и той же таблице, должен существовать некоторый механизм, позволяющий отличать один от другого. Вот для чего предназначен столбец типа. (Так что, по сути, это ответ на ваш главный вопрос, афакт)
По сути, если вы хотите пометить комментарии и блог (посты) одинаково, это более распространенные варианты:
- Теги: (tag_id, tag_name, что угодно), Comment_tags: (tag_id, comment_id), Blog_tags: (tag_id, blog_id) ... (я полагаю, это то, что вы хотите / нужно)
- Теги: то же , Tagassignments: (tag_id, object_type, object_id) ... (неудобно в доктрине и в целом неблагоприятно¹)
Вы выбрали другой подход: теги: (tag_id, tag_name, object_type), Tagassignments: (tag_id, object_id) (<- тип объекта неявно задается tagid, но, поскольку вы используете отношения, Tagassignments разделяется в blog_tags и comment_tags) </p>
Однако, как правильно прокомментировал Магнус Эрикссон, это может иметь смысл. У меня есть сомнения. Я предполагаю, что либо вариант 1, либо вариант 2 гораздо более распространены и удобны. И вы должны отбросить наследование в теге и вместо этого добавить наследование в ассоциацию (если необходимо, вам нужно сделать его дополнительной сущностью, чтобы он работал), а лучше посоветовать выбрать вариант 1, потому что его проще реализовать с Учение и его аннотации. (хотя вам нужно было бы добавить один метод get {Object} s () для каждого типа объекта, который должен быть помечен тегами.)
¹ поскольку Магнус правильно комментирует ниже (и комментирует я): Вы теряете большинство преимуществ, которые предоставляют базы данных, в основном производительность, ясность и последовательность. Я бы вообще советовал против такого подхода.