Возможно ли создать внешний ключ без первичного ключа? - PullRequest
0 голосов
/ 24 марта 2019

Я создаю две таблицы и хочу поместить внешний столбец в столбец customer_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 Ответ

2 голосов
/ 24 марта 2019

Документация Postgres для создания внешних ключей решает ваш вопрос:

Наконец, следует отметить, что внешний ключ должен ссылаться на столбцы, которые либо являютсяпервичный ключ или сформировать уникальное ограничение .Если внешний ключ ссылается на уникальное ограничение, есть некоторые дополнительные возможности относительно того, как сопоставляются нулевые значения.

Итак, вы, безусловно, можете создать внешний ключ в таблице 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)
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...