Я в процессе создания социальной сети.Он имеет несколько объектов, таких как новости, фото, которые могут иметь комментарии.Поскольку все комментарии имеют одинаковые столбцы и ведут себя одинаково, и единственное различие заключается в их типе - новости, фотография или что-то еще, что будет добавлено в будущем - я решил создать одну таблицу для всех комментариев со столбцом с именем type
.Это работало отлично, пока я не решил добавить внешние ключи в свою схему базы данных.
Таблица comment
имеет столбец parent
, который ссылается на id
из news
или photo
таблицы, в зависимости отв столбце type
.
Проблема в том, что я не могу добавить внешний ключ, который ссылается на неизвестную заранее таблицу, и даже больше, которая ссылается на несколько таблиц одновременно.
Вся база данных теперь используетвнешние ключи, кроме этого столбца parent
в таблице comment
.Это беспокоит меня, потому что это только место, где я не могу добавить внешний ключ.
Я уверен, что не могу создать такой внешний ключ;кое-что в моей структуре базы данных должно быть изменено.Я решил создать одну таблицу для комментариев, чтобы быть готовым к добавлению новых типов комментариев для новых объектов в будущем - видео, музыки, статей и т. Д., И не впадать в адский ад, когда я хочу добавить одну новую колонку для всех комментариев..
Если мне абсолютно необходимо создать отдельную таблицу для каждого типа комментариев, чтобы иметь возможность полностью использовать внешние ключи, я сделаю это.Но, может быть, другое общее решение этой проблемы уже существует, и я просто не знаю об этом?
Может быть, мне следует создать какую-то таблицу ссылок, которая связывает таблицу comment
с таблицами других сущностей?Но, может быть, это решение еще сложнее, чем создание отдельной таблицы для каждого типа комментария?
Может быть, у меня должно быть несколько столбцов в таблице comment
, например, newsId
, photoId
, к которым я могудобавить внешний ключ?
Эти решения просто не кажутся мне элегантными, или я просто что-то неправильно понимаю.Мое восприятие этого вопроса может быть совершенно неверным.Вот почему я здесь.Пожалуйста, поделитесь своими идеями.