2010-09-10 156 views
-2

因此,我是一個初學者,並試圖按照我的教授指示如何完成此操作。它們如下:帶插入語句的Oracle SQL問題

考慮表1-3中描述的關係數據庫。帶下劃線的屬性是表格的主鍵。使用您的Oracle帳戶創建此數據庫並插入每個表中列出的元組。確保包含主鍵和外鍵約束。將檢查約束放在以下三個屬性上。評級(0到10之間),Lengith(大於0),ReleaseDate(在1/1/1900之後)。

表1:劇院
名稱(下劃線爲小學),市,省,郵編,電話

表2:電影
標題(小學),等級,長度,RELEASEDATE

表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. 

任何INSERT INTO ShownAt其中標題只有一個詞(比如電影最多)工作得很好,但是不止一個單詞(比如The Expendables)的任何內容都不會執行,並且出現上述錯誤。任何幫助將非常感激。我可以發佈你需要的任何其他細節。

+0

什麼是符合您給出的示例錯誤的電影和劇院記錄的插入語句? @ APC的解釋似乎很可能,但看到其他數據將有助於證實這一點。 (另外,你是否應該在顯示的名字上也有一個FK?) – 2010-09-11 08:28:35

回答

1

沒有技術上的原因,當一個單詞鍵成功時,由多個單詞組成的主鍵應該失敗。

通常避免對主鍵列使用長VARCHAR2(或任何字符串數據類型)是一個好主意。這是因爲用錯配的情況或多餘的空間來引入錯誤更容易。以下是所有不同的值:'The Pianist', 'The pianist', 'The Pianist '

因此,對於ShownAt中某些插入失敗的一種解釋是轉錄錯誤:多字混合大小寫鍵的額外複雜性使得您更有可能在失敗語句中沒有完全正確地使用鍵。

+0

你是完全正確的,我沒有把所有這些視爲獨特的價值 - 感謝你的迴應。 – 2010-09-12 00:19:45