Как прописать связи в схеме базы данных?

При создании одной таблицы она ссылается на внешние значения из другой таблицы, то есть реализована связь многие ко многим на примере пользователей и отзывов:
spoiler
CREATE TABLE IF NOT EXISTS `task_force`.`users` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `reviews` INT UNSIGNED NOT NULL,

    FOREIGN KEY (`reviews`) REFERENCES `reviews` (`id`),
    PRIMARY KEY (`id`)
);

CREATE TABLE IF NOT EXISTS `task_force`.`reviews` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `user_id` INT UNSIGNED NOT NULL,

    FOREIGN KEY (`user_id`) REFERENCES `users` (`id`),
    PRIMARY KEY (`id`)
);

Таблица первая не создаётся, так как она не может взять значение из таблицы, которой ещё нет, ведь она расположена ниже:
spoiler
6134dba53a056294025342.png

Как можно описать схему без этих ошибок? Создать сначала таблицы, а потом прописать связи, как отдельный запрос? И есть ли вариант компактного решения в один файл без миграций?
  • Вопрос задан
  • 154 просмотра
Решения вопроса 1
@mletov
Если многие ко многим, то должна быть еще таблица-связка usersToReviews.
Но вообще это очень странно.... 10 пользователей коллективно написали 1 отзыв... Серьезно?)

Если все-таки один ко многим, что, как я подозреваю, вы и имели ввиду, то:
- Зачем вам поле `reviews` в пользователях? Оно не нужно, удалите.
- Как удалите, проблема решится сама собой: сначала создаете users, а уже потом reviews со ссылкой на users
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы