使用方法:主键,外键还是UNIQUE?

问题描述 投票:0回答:1

所以我尝试使用已经创建的TABLE上传DER方案,但似乎我需要升级,所以。

我想弄清楚在行上使用哪个(PK / FK / UQ)CONSTRAINT。 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
);

这些是需要创建的表,谁是PRIMARY KEY以及谁是外国参考?或者其中一个应该是独一无二的?

编辑:我在评论中链接了图像。

oracle database-design
1个回答
0
投票

这就是我如何做到这一点,只需查看列名(相当自我描述)。我还评论了你的代码片段,这些片段变得多余或错误(例如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>
© www.soinside.com 2019 - 2024. All rights reserved.