Что использовать: первичный ключ, внешний ключ или уникальный? - PullRequest
0 голосов
/ 19 сентября 2018

Итак, я попытался загрузить схему DER с уже созданной таблицей, но, похоже, мне нужно повысить уровень, поэтому.

Я пытаюсь выяснить, какой (PK / FK / UQ) CONSTRAINT toиспользовать на строках.Схема DER не указала на это, и, так как я полный дурак по SQL, я вернулся с вопросом:

CREATE TABLE autor
(
   aut_matricula       NUMBER (6),
   aut_nome            VARCHAR2 (50) CONSTRAINT autor_aut_nome NOT NULL,
   aut_cpf             NUMBER (11) CONSTRAINT autor_aut_cpf_nn NOT NULL,
   aut_dtnasc          DATE CONSTRAINT autor_aut_dtnasc_nn NOT NULL,
   aut_nacionalidade   VARCHAR2 (50)
                          CONSTRAINT autor_aut_nacionalidade_nn NOT NULL
);    

CREATE TABLE livro
(
   liv_codigo       NUMBER (6) CONSTRAINT livro_liv_codigo_nn NOT NULL,
   liv_titulo       VARCHAR2 (50) CONSTRAINT livro_liv_titulo_nn NOT NULL,
   liv_preco        NUMBER (5, 2) CONSTRAINT livro_liv_preco_nn NOT NULL,
   liv_lancamento   DATE CONSTRAINT livro_liv_lancamento_nn NOT NULL,
   edi_codigo       NUMBER (6) CONSTRAINT livro_edi_codigo_nn NOT NULL,
   ass_sigla        CHAR (3) CONSTRAINT livro_ass_sigla_nn NOT NULL
);

CREATE TABLE escreve
(
   liv_codigo      NUMBER (1) CONSTRAINT escreve_liv_codigo_nn NOT NULL,
   aut_matricula   NUMBER (1) CONSTRAINT escreve_aut_matricula_nn NOT NULL
);

CREATE TABLE assunto
(
   ass_sigla       CHAR (3) CONSTRAINT assunto_ass_sigla_nn NOT NULL,
   ass_descricao   VARCHAR2 (50) CONSTRAINT assunto_ass_descricao_nn NOT NULL
);

CREATE TABLE editora
(
   edi_codigo   NUMBER (1) CONSTRAINT editora_edi_codigo_nn NOT NULL,
   edi_nome     VARCHAR2 (50) CONSTRAINT editora_edi_nome_nn NOT NULL
);

Это ТАБЛИЦЫ, которые нужно создать, кто ПЕРВИЧНЫЙ КЛЮЧ ина кого ИНОСТРАННЫЕ ССЫЛКИ?Или один из них должен быть УНИКАЛЬНЫМ?

Редактировать: я связал изображения в комментариях.

1 Ответ

0 голосов
/ 19 сентября 2018

Вот как я это сделаю, просто посмотрев на имена столбцов (которые довольно информативны).Я также закомментировал части вашего кода, которые стали излишними или неправильными (например, типы данных в таблице ESCREVE).

SQL> CREATE TABLE assunto
  2  (
  3     ass_sigla       CHAR (3) CONSTRAINT pk_ass PRIMARY KEY,
  4     -- removed by LF assunto_ass_sigla_nn NOT NULL
  5     ass_descricao   VARCHAR2 (50) CONSTRAINT assunto_ass_descricao_nn NOT NULL
  6  );

Table created.

SQL>
SQL> CREATE TABLE editora
  2  (
  3     edi_codigo   NUMBER (1) CONSTRAINT pk_editora PRIMARY KEY,
  4     -- removed by LF editora_edi_codigo_nn NOT NULL
  5     edi_nome     VARCHAR2 (50) CONSTRAINT editora_edi_nome_nn NOT NULL
  6  );

Table created.

SQL>
SQL> CREATE TABLE autor
  2  (
  3     aut_matricula       NUMBER (6) CONSTRAINT pk_aut PRIMARY KEY,
  4     aut_nome            VARCHAR2 (50) CONSTRAINT autor_aut_nome NOT NULL,
  5     aut_cpf             NUMBER (11) CONSTRAINT autor_aut_cpf_nn NOT NULL,
  6     aut_dtnasc          DATE CONSTRAINT autor_aut_dtnasc_nn NOT NULL,
  7     aut_nacionalidade   VARCHAR2 (50)
  8                            CONSTRAINT autor_aut_nacionalidade_nn NOT NULL
  9  );

Table created.

SQL>
SQL> CREATE TABLE livro
  2  (
  3     liv_codigo       NUMBER (6) CONSTRAINT pk_liv PRIMARY KEY,
  4     -- removed by LF livro_liv_codigo_nn NOT NULL,
  5     liv_titulo       VARCHAR2 (50) CONSTRAINT livro_liv_titulo_nn NOT NULL,
  6     liv_preco        NUMBER (5, 2) CONSTRAINT livro_liv_preco_nn NOT NULL,
  7     liv_lancamento   DATE CONSTRAINT livro_liv_lancamento_nn NOT NULL,
  8     edi_codigo       NUMBER (6)
  9                         CONSTRAINT fk_liv_edi REFERENCES editora (edi_codigo)
 10                         NOT NULL,
 11     -- removed by LF livro_edi_codigo_nn NOT NULL
 12     ass_sigla        CHAR (3)
 13                         CONSTRAINT fk_liv_ass REFERENCES assunto (ass_sigla)
 14                         NOT NULL
 15  -- removed by LFlivro_ass_sigla_nn NOT NULL
 16  );

Table created.

SQL>
SQL> CREATE TABLE escreve
  2  (
  3     liv_codigo      NUMBER (6)
  4                        CONSTRAINT fk_esc_liv REFERENCES livro (liv_codigo),
  5     -- removed by LF NUMBER (1) CONSTRAINT  escreve_liv_codigo_nn NOT NULL,
  6     aut_matricula   NUMBER (6)
  7                        CONSTRAINT fk_esc_aut REFERENCES autor (aut_matricula),
  8     -- removed by LF NUMBER (1) CONSTRAINT escreve_aut_matricula_nn NOT NULL
  9     CONSTRAINT pk_esc PRIMARY KEY (liv_codigo, aut_matricula)
 10  );

Table created.

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