是否可以创建没有主键的外键?

时间:2019-03-24 14:28:19

标签: postgresql foreign-keys

我正在创建两个表,并且我想在知道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()
);

1 个答案:

答案 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)
);