Problema:
Você deseja saber os nomes padrão das restrições em uma tabela no Oracle.
Exemplo:
Em nosso banco de dados, criamos duas tabelas,
country
e student
, com as seguintes restrições:PRIMARY KEY
(o ID da coluna nas tabelas country
e student
), FOREIGN KEY
(a coluna country_id
na tabela student
), DEFAULT
(a coluna name
na tabela student
), UNIQUE
(a coluna name
na tabela country
e a coluna personal_number
na tabela student
) e CHECK
(a coluna age
na tabela student
). Solução:
CREATE TABLE country ( id int NOT NULL primary key, name varchar(100) UNIQUE ); CREATE TABLE student ( id int NOT NULL primary key, name varchar(100) DEFAULT 'UNKNOWN', personal_number varchar(100) UNIQUE, age int CHECK(age>15), country_id int, FOREIGN KEY(country_id) references country(id) );
Vamos mostrar como o Oracle nomeia as restrições dessas tabelas por padrão. Use esta consulta para vê-los:
select CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME from USER_CONSTRAINTS where TABLE_NAME='STUDENT' OR TABLE_NAME='COUNTRY';
Aqui está o resultado:
CONSTRAINT_NAME | CONSTRAINT_TYPE | TABLE_NAME |
---|---|---|
SYS_C007376 | R | ESTUDANTE |
SYS_C007366 | P | PAÍS |
SYS_C007374 | P | ESTUDANTE |
SYS_C007367 | U | PAÍS |
SYS_C007375 | U | ESTUDANTE |
SYS_C007372 | C | ESTUDANTE |
Discussão:
Quando criamos nossas tabelas, definimos restrições para algumas colunas. No entanto, não especificamos os nomes para essas restrições, portanto, elas são nomeadas por padrão. Como os nomes padrão para restrições são gerados?
No Oracle, o nome da restrição padrão começa com o nome de usuário, seguido por ‘
_C
’ e um número de sequência. Os tipos de restrição são ‘C
’ (check
), ‘P
' (chave primária), 'U
' (restrição única) e 'R
’ (chave estrangeira). Todos os nomes de restrição padrão são gerados como ‘SYS
’, ‘_
’, e o número. Você pode ver os nomes padrão na tabela acima. Por exemplo, o CHECK
restrição para a idade da coluna no student
tabela tem o nome SYS_C007372
.