Мне нужно создать 2 таблицы. первый
CREATE TABLE orders
( order_id number(10) NOT NULL,
order_name varchar2(50) NOT NULL,
payment_id number(10) NOT NULL,
CONSTRAINT order_id PRIMARY KEY (order_id),
);
и при создании второго я получил эту ошибку ORA-02270: нет соответствующего уникального или первичного ключа для этого списка столбцов
CREATE TABLE payment
(
payments_id number(10) NOT NULL,
payment_name varchar(50) NOT NULL,
CONSTRAINT payments_id PRIMARY KEY (payments_id),
FOREIGN KEY (payments_id) REFERENCES orders(payment_id)
);
не уверен, что я делаю неправильно
пожалуйста помоги
Это довольно очевидно - ваш внешний ключ указывает на ("ссылки") столбец в таблице ORDERS, но это не столбец PK этой таблицы. В ORDERS вы объявили ORDER_ID как PK. Предполагается ли, что PAYMENT_ID имеет уникальные (отличающиеся) значения в таблице ORDERS и что на него должна ссылаться вторая таблица? Если это так, вам нужно добавить ограничение UNIQUE для этого столбца в таблице ORDERS.


Вам нужно сослаться на столбец UNIQUE или PRIMARY KEY. Столбец payment_id не имеет ни одного из этих ограничений.
Из Документация по ограничениям Oracle:
Foreign Key Constraints
A foreign key constraint (also called a referential integrity constraint) designates a column as the foreign key and establishes a relationship between that foreign key and a specified primary or unique key, called the referenced key.
Вместо этого вы можете добавить в таблицу столбец order_id:
CREATE TABLE orders(
order_id NUMBER(10) NOT NULL,
order_name VARCHAR2(50) NOT NULL,
CONSTRAINT orders__order_id__pk PRIMARY KEY (order_id)
);
CREATE TABLE payment(
payments_id NUMBER(10) NOT NULL,
payment_name VARCHAR2(50) NOT NULL,
order_id NOT NULL,
CONSTRAINT payment__payments_id__pk PRIMARY KEY (payments_id),
CONSTRAINT payment__order_id__fk FOREIGN KEY (order_id)
REFERENCES orders (order_id)
);
дб <> рабочий пример здесь
всем спасибо за ответы, я добавил эту строчку в скрипт создания заказов и теперь все заработало CONSTRAINT AK_payment_id UNIQUE (payment_id),
@ Simo51 Simo51 Это может сработать, но вы должны подумать, имеет ли смысл это делать? Учитывая оба ограничения, вы можете иметь только уникальные order_id, а также только уникальные payment_id в одних и тех же таблицах, поэтому между двумя идентификаторами будет отношение один к одному. В таком случае, почему бы просто не создать один столбец id и использовать его для обоих? Но если у вас может быть несколько платежей за каждый заказ, то это определенно не имеет смысла.
ССЫЛКИ заказов(payment_id)