我正在创建两个表,并且我想在知道client_email列不是主键的情况下在该列上放置一个外键。
那么可以创建没有主键的外键吗?以及我如何使用DATE()?
这是我的餐桌顾客和订单:
CREATE TABLE customer(
customer_id INTEGER PRIMARY KEY NOT NULL,
customer_email VARCHAR(225)
customer_name VARCHAR(225)
customer_last_name VARCHAR(225)
);
CREATE TABLE order(
order_id INTEGER PRIMARY KEY NOT NULL
customer_email VARCHAR(225) REFERENCES customer(customer_email)
product_1 DECIMAL(10,2)
product_2 DECIMAL(10,2)
product_3 DECIMAL(10,2)
product_4 DECIAML(10,2)
product_5 DECIAML(10,2)
order_date DATE()
);
答案 0 :(得分:2)
Postgres的用于创建外键的documentation解决了您的问题:
最后,我们应该提到,外键必须引用为主键或形成唯一约束的列。如果外键引用了唯一约束,则还有一些有关如何匹配空值的可能性。
因此,您当然可以在order
表中创建一个外键,该外键引用customer_email
表中的customer
,但是在电子邮件字段上必须有唯一的约束。因此,customer
表的以下定义应该起作用:
CREATE TABLE customer (
customer_id INTEGER PRIMARY KEY NOT NULL,
customer_email VARCHAR(225),
customer_name VARCHAR(225),
customer_last_name VARCHAR(225),
CONSTRAINT email_unique UNIQUE (customer_email)
);