SQL - несколько записей для внешнего ключа - PullRequest
0 голосов
/ 09 января 2019

Это мой первый раз здесь, не знаю точно, как это происходит. :) У меня есть проект в школе для баз данных, мы используем SQL в SQL Developer, с Oracle Express 11g. Я решил сделать БД для музыкального фестиваля, и у меня есть некоторые проблемы с этим. У меня проблемы с заполнением таблиц, я думаю, что это в основном ошибка проекта.

У меня есть настольный музыкальный фестиваль, который я хотел использовать в качестве основного стола, из которого каждый стол превращается в другой. Чего я не понимаю, так это как я заполняю таблицы для отношений ОДИН-НА-МНОГИЕ. Из таблицы MUSIC FESTIVAL у меня есть отношение ОДИН-НА-МНОЖЕСТВО к таблице PUBLIC, которая содержит информацию о каждом посетителе концерта. Я поместил TICKET_ID в качестве первичного ключа в PUBLIC, чтобы использовать его в качестве внешнего ключа в MUSIC_FESTIVAL, но когда мне удалось вставить записи в таблицу, я просто застрял.

Вот ERD, чтобы облегчить понимание:

enter image description here

А вот как это выглядит в SQL DEVELOPER:

РАЗРАБОТЧИК SQL

Это ошибка, которую я получаю: Одна ошибка при сохранении изменений в таблице "ROBERT". "PUBLIC": Строка 1: ORA-02291: ограничение целостности (ROBERT.PUBLIC_MUSIC_FESTIVAL) нарушено - родительский ключ не найден ORA-06512: в строке 1

Кроме того, мне трудно заполнять таблицы из-за этих ошибок. РАЗРАБОТЧИК SQL не позволяет мне вводить данные в одну таблицу, а затем переходить в другую таблицу для устранения ошибок.

Пожалуйста, помогите, мне действительно нужно немного.

Хорошего дня!

1 Ответ

0 голосов
/ 09 января 2019

Как правило, вам нужно вставлять данные по порядку. То есть сначала вставьте в родительский элемент, затем в дочерние таблицы. Ну ... если вы не используете отложенные ограничения, но это довольно сложная тема, которую вы должны пока избегать.

Например:

insert into MUSIC FESTIVAL (name, location, date, stages, tickets, transportation)
  values ('Monster', 'Tokio', date '2019-03-15', 12345678, 12);

insert into PUBLIC (public_name, ..., ticket_id, ...)
            values ('Abc', ...,       'Monster', ...);

Вторая вставка в дочерней таблице включает внешний ключ Monster, уже созданный первой вставкой.

...