【发布时间】:2018-07-22 00:13:13
【问题描述】:
customer 和 orderInfo 表可以自行创建,但其他表不会并抛出错误。
CREATE TABLE customer (
customerID NUMBER PRIMARY KEY,
firstName VARCHAR2 (30) NOT NULL,
lastName VARCHAR2 (30) NOT NULL,
address VARCHAR2 (60),
city VARCHAR2 (30),
state VARCHAR2(20),
zipCode CHAR (5),
country VARCHAR2 (50),
phone CHAR (10),
email VARCHAR2 (30) NOT NULL UNIQUE,
username VARCHAR2 (20) NOT NULL UNIQUE,
password VARCHAR2 (20) NOT NULL
);
CREATE TABLE orderInfo (
orderID NUMBER PRIMARY KEY,
customerID NUMBER REFERENCES customer (customerID),
orderDate DATE,
shipDate DATE
);
CREATE TABLE orderDetail (
orderDetailID NUMBER PRIMARY KEY,
orderID NUMBER REFERENCES orderInfo (orderID),
productID VARCHAR2 (10) REFERENCES product (productID),
price NUMBER (7,2),
quantity NUMBER (CHECK > 0)
);
CREATE TABLE product (
productID VARCHAR2 (10) PRIMARY KEY,
categoryID VARCHAR2 (10) REFERENCES categoryInfo (categoryID),
productName VARCHAR2 (40),
productDescription VARCHAR2 (100),
unitPrice NUMBER,
picture BLOB,
);
CREATE TABLE categoryInfo (
categoryID VARCHAR2 (10) PRIMARY KEY,
categoryName VARCHAR (50),
description VARCHAR2 (100),
);
【问题讨论】:
-
需要定义表才能用于外键引用。
-
你不应该使用
CHAR。它所做的只是无缘无故地在每个值的末尾添加空格,浪费空间并导致比较错误。标准字符串类型是VARCHAR2。此外,在将列定义为外键时,您不需要重复数据类型,因为它们将从引用的父列继承。