2010-09-10 75 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