Я пытаюсь создать таблицу с двумя внешними ключами, но получаю сообщение об ошибке пропуска левой скобки - PullRequest
1 голос
/ 16 марта 2020
create table downloads (
Download_id      varchar2(150)          not null,
User_id          varchar2(150)          references users (User_id), foreign key,
Download_date    date                   not null,
File_name        varchar(300)           not null,
Product_id       varchar(300)           references Products (Product_id), foreign key,

constraint users_user_id foreign key(User_id) references users(User_id),
constraint prod_product_id foreign key(Product_id) references products(Product_id)
);

1 Ответ

2 голосов
/ 16 марта 2020

Вам не нужны ключевые слова FOREIGN KEY, когда вы используете встроенные ограничения, и вам не нужны как внешние, так и встроенные ограничения:

create table downloads (
Download_id      varchar2(150) not null,
User_id          varchar2(150) references users (User_id),
Download_date    date          not null,
File_name        varchar(300)  not null,
Product_id       varchar(300)  references Products (Product_id)
);

db <> fiddle

Кроме того, вы должны учитывать:

  • именование ваших ограничений;
  • с использованием целых чисел в качестве первичного ключа, а не (больших ) strings;
  • без префикса идентификаторов столбца с именем таблицы; и
  • с использованием IDENTITIY столбцов (если вы используете Oracle 12 или более поздней версии, в противном случае используйте последовательности).

Например:

create table downloads (
  id         NUMBER(10,0)
             GENERATED ALWAYS AS IDENTITY
             CONSTRAINT downloads__id__pk PRIMARY KEY,
  User_id    NUMBER(10,0)
             CONSTRAINT downloads__user_id__fk REFERENCES users (id),
  datetime   DATE
             CONSTRAINT downloads__datetime__nn NOT NULL,
  File_name  VARCHAR2(300)
             CONSTRAINT downloads__file_name__nn NOT NULL,
  Product_id NUMBER(10,0)
             CONSTRAINT downloads__product_id__FK REFERENCES Products (id)
);

дб <> скрипка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...