Problem:
Du vil kende standardnavnene på begrænsninger i en tabel i Oracle.
Eksempel:
I vores database opretter vi to tabeller, country
og student
, med følgende begrænsninger:PRIMARY KEY
(kolonne-id'et i tabellerne country
og student
), FOREIGN KEY
(kolonnen country_id
i tabellen student
), DEFAULT
(kolonnen name
i tabellen student
), UNIQUE
(kolonnen name
i tabellen country
og kolonnen personal_number
i tabellen student
), og CHECK
(kolonnen age
i tabellen student
).
Løsning:
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) );
Lad os vise, hvordan Oracle navngiver disse tabellers begrænsninger som standard. Brug denne forespørgsel til at se dem:
select CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME from USER_CONSTRAINTS where TABLE_NAME='STUDENT' OR TABLE_NAME='COUNTRY';
Her er resultatet:
CONSTRAINT_NAME | CONSTRAINT_TYPE | TABLE_NAME |
---|---|---|
SYS_C007376 | R | STUDENT |
SYS_C007366 | P | LAND |
SYS_C007374 | P | STUDENT |
SYS_C007367 | U | LAND |
SYS_C007375 | U | STUDENT |
SYS_C007372 | C | STUDENT |
Diskussion:
Når vi opretter vores tabeller, sætter vi begrænsninger for nogle kolonner. Vi angiver dog ikke navnene for disse begrænsninger, så de navngives som standard. Hvordan genereres standardnavnene for begrænsninger?
I Oracle starter standardbegrænsningsnavnet med brugernavnet efterfulgt af '_C
’ og et løbenummer. Begrænsningstyperne er 'C
’ (check
), ‘P
' (primær nøgle), 'U
' (unik begrænsning) og 'R
' (fremmed nøgle). Alle standard begrænsningsnavne genereres som 'SYS
', '_
’, og nummeret. Du kan se standardnavnene i tabellen ovenfor. For eksempel CHECK
begrænsning for kolonnealderen i student
tabellen har navnet SYS_C007372
.