У меня есть приложение в Elixir с новостями, которое пользователь должен иметь возможность комментировать.Вот моя миграция для создания функциональности комментариев:
def change do
create table(:news_comments, primary_key: false) do
add :id, :uuid, primary_key: true
add :news_id, references(:news, type: :uuid, on_delete: :nilify_all)
add :comment_id, references(:comments, type: :uuid, on_delete: :nilify_all)
add :parent_comment_id, references(:comments, type: :uuid, on_delete: :nilify_all)
end
end
Я хочу разрешить комментарии к комментариям и делаю это с ограничением.Пользователь может комментировать новости, отправив news_id
и comment_id
.Я хочу разрешить отправлять подкомментарии, которые я хочу разрешить только для тех же новостей.Так что мне нужно уникальное ограничение для news_id
и comment_id
, никаких проблем до сих пор.Но когда пользователь отправляет подкомментарий, я хочу заверить, что подкомментарий содержит news_id
и parent_comment_id
, которые уже сохранены в базе данных.Допустим, я получил news_comment
с news_id = 1
и comment_id = 1
, база данных должна разрешать только вставки с news_id = 1
и parent_comment_id = 1
.Я не хочу обрабатывать этот случай в коде, потому что я думаю, что база данных может справиться с этим.Не будет проблем с хранимой процедурой, но должен быть способ достичь этого с ограничением, но не знаю, как.
Следующий случай, который должно обрабатываться ограничением, - разрешить только комментарии к комментариям без комментариев.parent_comment_id
, потому что я не хочу разрешать под-комментарии для под-комментариев, например, комментировать youtube.Несколько ограничений в порядке, просто нужно решение, иначе мне нужно обработать его внутри моего кода с помощью некоторых запросов к базе данных, которых я бы хотел избежать.
Спасибо