Problém:
Chcete znát výchozí názvy omezení v tabulce v Oracle.
Příklad:
V naší databázi vytvoříme dvě tabulky, country
a student
, s následujícími omezeními:PRIMARY KEY
(ID sloupce v tabulkách country
a student
), FOREIGN KEY
(sloupec country_id
v tabulce student
), DEFAULT
(sloupec name
v tabulce student
), UNIQUE
(sloupec name
v tabulce country
a sloupec personal_number
v tabulce student
) a CHECK
(sloupec age
v tabulce student
).
Řešení:
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) );
Ukážeme si, jak Oracle standardně pojmenovává omezení těchto tabulek. Chcete-li je zobrazit, použijte tento dotaz:
select CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME from USER_CONSTRAINTS where TABLE_NAME='STUDENT' OR TABLE_NAME='COUNTRY';
Zde je výsledek:
CONSTRAINT_NAME | CONSTRAINT_TYPE | TABLE_NAME |
---|---|---|
SYS_C007376 | R | STUDENT |
SYS_C007366 | P | ZEMĚ |
SYS_C007374 | P | STUDENT |
SYS_C007367 | U | ZEMĚ |
SYS_C007375 | U | STUDENT |
SYS_C007372 | C | STUDENT |
Diskuse:
Když vytváříme naše tabulky, nastavujeme omezení pro některé sloupce. Neuvádíme však názvy těchto omezení, takže jsou pojmenovány ve výchozím nastavení. Jak se generují výchozí názvy pro omezení?
V Oracle začíná výchozí název omezení uživatelským jménem, po kterém následuje „_C
“ a pořadové číslo. Typy omezení jsou „C
“ (check
), „P
“ (primární klíč), „U
“ (jedinečné omezení) a „R
' (cizí klíč). Všechny výchozí názvy omezení jsou generovány jako „SYS
“, „_
“ a číslo. Výchozí názvy můžete vidět v tabulce výše. Například CHECK
omezení pro věk sloupce v student
tabulka má název SYS_C007372
.