首先,我很抱歉再次问了同样的问题,但是关于旧主题的信息在我的oraclesql代码中不起作用,其次,可能有一些语法错误,我上学期在学校学到了mysql,但是现在我们正在学习oraclesql和旧的mysql信息,所以我有点困惑。
因此,我的问题是,我想创建三个相关的表(电影放映-演员),但我正在失去右括号。尝试用外键将强制转换表连接到电影表,将参与者表连接到强制转换表。我做错什么了?它有多大的空间?
CREATE TABLE Movie (
movie_id NUMBER(7) NOT NULL,
movie_name varchar2(50) NOT NULL ,
movie_director varchar2(50) NOT NULL ,
movie_year INT(4) NOT NULL ,
movie_duration INT(3) ,
movie_language varchar2(15) ,
movie_rating number(4,2) ,
PRIMARY KEY(movie_id),
CONSTRAINT is_unique UNIQUE(movie_id),
CONSTRAINT movie_id_checker CHECK(movie_id>0 and movie_id<=9999999)
);
CREATE TABLE Casts (
movie_id_fk INT(7) FOREIGN KEY REFERENCES Movie(movie_id) ,
cast_id INT(7) NOT NULL,
actor_fullname varchar2(50) NOT NULL ,
actor_role varchar2(50) ,
PRIMARY KEY(cast_id),
CONSTRAINT is_unique UNIQUE(cast_id),
CONSTRAINT cast_id_checker CHECK(cast_id>0 and cast_id<=9999999)
);
CREATE TABLE Actor (
cast_id_fk INT(7) FOREIGN KEY REFERENCES Casts(cast_id) ,
actor_id INT(7) NOT NULL,
actor_name CHAR(30) ,
actor_surname CHAR(25) ,
actor_gender CHAR(5) ,
actor_age CHAR(3) CONSTRAINT real_age_check CHECK(actor_age>0 AND actor_age<=150),
PRIMARY KEY(actor_id),
CONSTRAINT is_unique UNIQUE(actor_id),
CONSTRAINT actor_id_checker CHECK(actor_id>0 and actor_id<=9999999)
)发布于 2021-04-09 19:25:31
这些错误是:
INT或NUMBER(4,0)而不是INT(4)REFERENCES关键字,而不需要FOREIGN KEY。其他问题:
CHAR字符串,而希望我们使用可变长度的VARCHAR2。AGE列,因为它将在演员的第一个生日一开始就过时;相反,有一个DATE_OF_BIRTH列是DATE数据类型,然后您可以在必要时计算年龄。fk作为后缀。NUMBER(7,0)值使用id值,则不需要检查它是否小于或等于9999999,因为不可能是更大的值;但是,您可以有零值或负值,因此下限的check约束可能仍然有效。IDENTITY值使用一个id列,除非您从第三方获取id值。CREATE TABLE Movie (
id NUMBER(7,0) NOT NULL,
name varchar2(50) NOT NULL ,
director varchar2(50) NOT NULL ,
year NUMBER(4,0) NOT NULL ,
duration NUMBER(3,0),
language varchar2(15) ,
rating number(4,2) ,
PRIMARY KEY(id),
CONSTRAINT movie_id_checker CHECK(id>0)
);
CREATE TABLE Casts (
movie_id INT REFERENCES Movie(id) ,
id NUMBER(7,0) NOT NULL,
fullname varchar2(50) NOT NULL ,
role varchar2(50) ,
PRIMARY KEY(id),
CONSTRAINT cast_id_checker CHECK(id>0)
);
CREATE TABLE Actor (
cast_id NUMBER(7,0) REFERENCES Casts(id) ,
id NUMBER(7,0) NOT NULL,
name VARCHAR2(30) ,
surname VARCHAR2(25) ,
gender CHAR(1)
CHECK ( gender IN ( 'M', 'F', 'X', 'Y', 'Z' ) ),
date_of_birth DATE
CONSTRAINT real_age_check CHECK(date_of_birth >= DATE '1870-01-01' ),
PRIMARY KEY(id),
CONSTRAINT actor_id_checker CHECK(id>0)
);db<>fiddle https://dbfiddle.uk/?rdbms=oracle_18&fiddle=3a92c9452b503b1e2065af5ba431929f
https://stackoverflow.com/questions/67027060
复制相似问题