Так что я новичок в этом и пытаюсь следовать инструкциям моих профессоров, как это сделать. Они следующие:
Рассмотрим реляционную базу данных, описанную в таблицах 1-3. Подчеркнутый атрибут (ы) является первичным ключом для таблицы. Используйте свою учетную запись Oracle, чтобы создать эту базу данных и вставить кортежи, перечисленные в каждой таблице. Убедитесь, что вы включили ограничения первичного ключа и внешнего ключа. Поставьте контрольные ограничения на следующие три атрибута. Рейтинг (от 0 до 10), Lengith (больше 0), ReleaseDate (после 01.01.1900).
Таблица 1: Театры
Имя (подчеркнуто как основной), город, штат, почтовый индекс, телефон
Таблица 2: Фильмы
Заголовок (основной), рейтинг, длина, дата выпуска
Таблица 3: ShownAt
TheatreName, MovieTitle (ОБА указан в качестве основного)
Вот как я их объявил:
CREATE TABLE Theatres (
Name varchar2(50) not null,
City varchar2(50) not null,
State varchar2(50) not null,
Zip number not null,
Phone varchar2(50) not null,
CONSTRAINT name_pk PRIMARY KEY (Name)
);
create table Movies (
Title varchar2(100),
Rating NUMBER CONSTRAINT Rating_CHK CHECK (Rating BETWEEN 0 AND 10),
Length NUMBER CONSTRAINT Length_CHK CHECK (Length > 0),
ReleaseDate date CONSTRAINT RDATE_CHK CHECK (ReleaseDate > to_date('1/January/1900', 'DD/MONTH/YYYY')),
CONSTRAINT title_pk PRIMARY KEY (Title)
);
create table ShownAt (
TheatreName varchar2(50),
MovieTitle varchar2(100),
CONSTRAINT moviet_fk FOREIGN KEY (MovieTitle) REFERENCES Movies(Title),
CONSTRAINT shown_pk PRIMARY KEY (TheatreName, MovieTitle)
);
Это объявляет нормально, и я не получаю ошибок. Ниже приведены мои вставки (я дал один пример вставки для каждой таблицы):
insert into theatres values ( 'Great Escape 14', 'Wilder', 'KY', '41076', '(859) 442-0000' );
insert into movies values ( 'The Expendables', '7.6', '103', '13 August 2010' );
insert into shownat values ( 'Great Escape 14', 'The Expendables' );
Все вставки в кинотеатры и фильмы проходят без помех. Для ShownAt я получаю МНОГО ОШИБОК, большинство из которых выглядят примерно так:
Error starting at line 37 in command:
insert into shownat values ( 'Showcase Cinema De Lux Florence', 'The Pianist' )
Error report:
SQL Error: ORA-02291: integrity constraint (LANGB1.MOVIET_FK) violated - parent key not found
Значение:
02291. 00000 - "integrity constraint (%s.%s) violated - parent key not found"
*Cause: A foreign key value has no matching primary key value.
*Action: Delete the foreign key or add a matching primary key.
Любая вставка в ShownAt, где заголовок - это всего одно слово (скажем, фильм «Вверх»), работает нормально, но все, что содержит более одного слова (например, «Неудержимые»), не будет выполнено и выдает вышеуказанную ошибку. Любая помощь приветствуется. Я могу опубликовать любые другие детали, которые вам нужны.