2010-09-10 2 views
-2

Итак, я начинаю с этим и стараюсь следовать инструкциям моих преподавателей о том, как это сделать. Они заключаются в следующем:Проблема Oracle SQL с вставными выражениями

Рассмотрим реляционную базу данных, описанную в таблицах 1-3. Подчеркнутый атрибут (ы) является первичным ключом для таблицы. Используйте свою учетную запись Oracle для создания этой базы данных и вставки кортежей, перечисленных в каждой таблице. Убедитесь, что вы включили ограничения первичного ключа и внешнего ключа. Поместите контрольные ограничения на следующие три атрибута. Рейтинг (от 0 до 10), Lengith (больше 0), ReleaseDate (после 1/1/1900).

Таблица 1: Театры
Имя (Подчеркнуто как первичный), город, штат, почтовый индекс, телефон

Таблица 2: Фильмы
Название (Primary), рейтинг, длина, ReleaseDate

Таблица 3 : ShownAt
TheatreName, MovieTitle (ОБА в список Primary)

Вот как я их объявил:

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, где заголовок только одно слово (скажем, фильм Вверх) работает отлично, но ничего с более чем одним словом (например, Expendables) не будет выполняться и дать вышеприведенную ошибку. Любая помощь приветствуется. Я могу разместить любые другие детали, которые вам нужны.

+0

Каковы записи вставки для записей в кинотеатре и в театре, соответствующие приведенной вами ошибке примера? @ Объяснение APC кажется вероятным, но другие данные помогут подтвердить это. (Кроме того, вы должны иметь FK на showat.theatrename тоже?) –

ответ

1

Нет никакой технической причины, по которой первичный ключ, состоящий из нескольких слов, должен терпеть неудачу, если один ключевой слово будет завершен.

Как правило, рекомендуется избегать использования длинного VARCHAR2 (или любого типа данных строки) для столбцов первичного ключа. Это связано с тем, что легче вводить ошибки с несоответствующим случаем или дополнительными пробелами. Ниже перечислены все различные значения: 'The Pianist', 'The pianist', 'The Pianist '.

Таким образом, одно объяснение отказа некоторых вставок в ShownAt - это ошибки транскрипции: дополнительная сложность многословного, смешанного ключевого ключа делает более вероятным, что вы не получили ключи точно в случае неудачных утверждений.

+0

Вы были совершенно правы, я не рассматривал все эти как разные ценности - спасибо за ответ. –

Смежные вопросы