Probleem:
U wilt de standaardnamen van beperkingen in een tabel in Oracle weten.
Voorbeeld:
In onze database maken we twee tabellen, country
en student
, met de volgende beperkingen:PRIMARY KEY
(de kolom-ID in de tabellen country
en student
), FOREIGN KEY
(de kolom country_id
in de tabel student
), DEFAULT
(de kolom name
in de tabel student
), UNIQUE
(de kolom name
in de tabel country
en de kolom personal_number
in de tabel student
), en CHECK
(de kolom age
in de tabel student
).
Oplossing:
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) );
Laten we laten zien hoe Oracle de beperkingen van deze tabellen standaard benoemt. Gebruik deze zoekopdracht om ze te bekijken:
select CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME from USER_CONSTRAINTS where TABLE_NAME='STUDENT' OR TABLE_NAME='COUNTRY';
Hier is het resultaat:
CONSTRAINT_NAME | CONSTRRAINT_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 |
Discussie:
Wanneer we onze tabellen maken, stellen we beperkingen in voor sommige kolommen. We specificeren echter geen namen voor deze beperkingen, dus ze worden standaard genoemd. Hoe worden de standaardnamen voor beperkingen gegenereerd?
In Oracle begint de standaardnaam van de beperking met de gebruikersnaam, gevolgd door '_C
’ en een volgnummer. De soorten beperkingen zijn 'C
’ (check
), 'P
’ (primaire sleutel), ‘U
’ (unieke beperking), en ‘R
' (vreemde sleutel). Alle standaard namen van beperkingen worden gegenereerd als 'SYS
’, ‘_
’, en het nummer. U kunt de standaardnamen in de bovenstaande tabel zien. Bijvoorbeeld de CHECK
beperking voor de kolomleeftijd in de student
tabel heeft de naam SYS_C007372
.