我正在尝试在SQL开发人员中创建一个新表。我需要对Clinic_City有一个CHECK约束,但是它不起作用。有谁能够帮我?
CREATE TABLE TravelClinics (Clinic_Number number(3) PRIMARY KEY,
Clinic_Street varchar2(20) NOT NULL,
Clinic_City varchar2(10) NOT NULL,
Clinic_County varchar2(15) NOT NULL,
Clinic_Postcode varchar2(7) NOT NULL,
Clinic_Tel varchar2(11) NOT NULL,
Clinic_Fax varchar2(11) NOT NULL
CONSTRAINT
CHECK(Clinic_City IN ('LONDON', 'BIRMINGHAM', 'MANCHESTER', 'LEEDS', 'GLASGOW', 'EDINBURGH')))
答案 0 :(得分:1)
在Oracle中,您需要将约束附加到正确的列,并为其命名,如下所示:
CREATE TABLE TravelClinics (
Clinic_Number number(3) PRIMARY KEY
, Clinic_Street varchar2(20) NOT NULL
, Clinic_City varchar2(10) NOT NULL
CONSTRAINT Valid_City
CHECK(Clinic_City IN ('LONDON', 'BIRMINGHAM', 'MANCHESTER', 'LEEDS', 'GLASGOW', 'EDINBURGH'))
, Clinic_County varchar2(15) NOT NULL
, Clinic_Postcode varchar2(7) NOT NULL
, Clinic_Tel varchar2(11) NOT NULL
, Clinic_Fax varchar2(11) NOT NULL
)
更好的方法是为城市创建一个单独的表,在其中插入六行,并从TravelClinics
表中引用该表。这将减少需要复制的信息量。它还可以极大地简化添加新城市,因为它将是一个数据操作,而不是一个模式操作。
答案 1 :(得分:1)
试试这个。定义Clinic_Fax
列
CREATE TABLE TravelClinics (Clinic_Number number(3) PRIMARY KEY,
Clinic_Street varchar2(20) NOT NULL,
Clinic_City varchar2(10) NOT NULL,
Clinic_County varchar2(15) NOT NULL,
Clinic_Postcode varchar2(7) NOT NULL,
Clinic_Tel varchar2(11) NOT NULL,
Clinic_Fax varchar2(11) NOT NULL,
CONSTRAINT pk CHECK(Clinic_City IN ('LONDON', 'BIRMINGHAM', 'MANCHESTER', 'LEEDS', 'GLASGOW', 'EDINBURGH')))
答案 2 :(得分:0)
而是创建一个域表CITY和一个FK。 如果您想要添加城市,只需添加一行即可。 FK病是一种约束。
它还增加了规范化的优势。
答案 3 :(得分:0)
CREATE TABLE TravelClinics(Clinic_Number number(3)PRIMARY KEY, Clinic_Street varchar2(20)NOT NULL, Clinic_City varchar2(10)约束tc_clinic_city_nn NOT NULL CONSTRAINT tc_clinic_city_ck 检查(Clinic_City IN('LONDON','BIRMINGHAM','MANCHESTER','LEEDS','GLASGOW','EDINBURGH')), Clinic_County varchar2(15)NOT NULL, Clinic_Postcode varchar2(7)NOT NULL, Clinic_Tel varchar2(11)NOT NULL, Clinic_Fax varchar2(11)NOT NULL)