Articles

Definování Omezení v CREATE TABLE v Oracle 12c

můžete použít příkazu CREATE TABLE prosadit několik různých druhů omezení na stůl: kandidát klíče, primární klíče, cizí klíče, a zkontrolujte, zda podmínky. Klauzule omezení může omezit jeden sloupec nebo skupinu sloupců v tabulce. Smyslem těchto omezení je přimět Oracle, aby vykonal většinu práce při udržování integrity vaší databáze. Čím více omezení přidáte do definice tabulky, tím méně práce musíte udělat v aplikacích pro údržbu dat. Na druhou stranu, čím více omezení je v tabulce, tím déle trvá aktualizace dat.

omezení můžete zadat jedním ze dvou způsobů: jako součást definice sloupce (známé jako omezení sloupce) nebo na konci příkazu Vytvořit tabulku(známé jako omezení tabulky). Klauzule, které omezují několik sloupců, musí být omezení tabulky.

kandidátský klíč

kandidátský klíč je kombinací jednoho nebo více sloupců, jejichž hodnoty jednoznačně identifikují každý řádek tabulky. Následující seznam ukazuje vytvoření jedinečného omezení pro tabulku problémů:

klíčem pro tuto tabulku je kombinace města a SAMPLE_DATE. Všimněte si, že oba sloupce jsou také prohlášeny za NULL. Tato funkce vyžaduje, abyste zadali hodnoty pro určité sloupce, aby se řádky vložily. Je zřejmé, že informace o teplotě a srážkách nejsou užitečné, aniž by věděly, kde a kdy byly shromážděny. Tato technika je společná pro sloupce, které jsou primárním klíčem tabulky, ale je také užitečné, pokud jsou určité sloupce kritické, aby řádek dat měl smysl. Pokud není zadáno NULL, sloupec může mít hodnoty NULL.

Když vytvoříte JEDINEČNÉ omezení, Oracle vytvoří jedinečný index, chcete vynutit jedinečnost hodnot. V rámci omezení primárního klíče musí být alespoň jeden ze sloupců v primárním klíči pro každý řádek NULL.

primární klíč

primární klíč tabulky je jedním z kandidátských klíčů, kterým dáváte některé speciální vlastnosti. Můžete mít pouze jeden primární klíč a sloupec primárního klíče nemůže obsahovat nuly.

následující příkaz VYTVOŘENÍ TABULKY má stejný účinek jako předchozí, kromě toho, že můžete mít několik UNIKÁTNÍCH omezení, ale pouze jeden PRIMÁRNÍ KLÍČ omezení:

Pro jeden sloupec primární nebo kandidát klíče, můžete definovat klíč na sloupec s sloupce, omezení, místo stolu omezení:

V tomto případě, AUTHOR_NAME sloupec je primární klíč, a Oracle vygeneruje název pro omezení PRIMÁRNÍHO KLÍČE. To se nedoporučuje, pokud chcete vynutit společný standard pojmenování klíčů, jak je popsáno dále v části “ Omezení pojmenování.“

označení tabulkových prostorů indexu

unikátní a omezení primárního klíče vytvářejí indexy. Pokud Oraclu neřeknete jinak, jsou tyto indexy umístěny ve výchozím prostoru tabulky. Chcete-li zadat jiný tablespace, pomocí POMOCÍ INDEXU TABLESPACE klauzule CREATE TABLE příkazu, jak je ukázáno v následujícím výpisu:

index spojené s AUTHOR_PK omezení primárního klíče budou umístěny v tablespace USERS.

POZNÁMKA:

Ve většině výchozí instalace, UŽIVATELÉ tablespace, je vytvořen a je výchozí tablespace.

cizí klíč

cizí klíč je kombinací sloupců s hodnotami založenými na hodnotách primárního klíče z jiné tabulky. Omezení cizího klíče, známé také jako omezení referenční integrity, určuje, že hodnoty cizího klíče odpovídají skutečným hodnotám primárního klíče v druhé tabulce. V POLICI stolu, například, CATEGORY_NAME sloupec odkazuje na hodnoty pro CATEGORY_NAME sloupec v tabulce KATEGORIE:

můžete odkazovat na primární nebo unikátní klíč, dokonce ve stejné tabulce. V klauzuli reference však nelze odkazovat na tabulku ve vzdálené databázi. Formulář tabulky (který se používá dříve k vytvoření primárního klíče v tabulce problémů) můžete použít místo formuláře sloupce k určení cizích klíčů s více sloupci.

někdy budete chtít odstranit tyto závislé řádky, když odstraníte řádek, na kterém závisí. V případě REGÁL a KATEGORIE, pokud odstraníte CATEGORY_NAME z KATEGORIE, možná budete chtít, aby odpovídající REGÁL CATEGORY_NAME sloupec hodnoty NULL. V jiném případě možná budete chtít odstranit celý řádek. Klauzule o DELETE CASCADE přidaná do klauzule reference říká společnosti Oracle, aby odstranila závislý řádek, když odstraníte odpovídající řádek v nadřazené tabulce. Tato akce automaticky udržuje referenční integritu.

omezení kontroly

mnoho sloupců musí mít hodnoty, které jsou v určitém rozsahu nebo splňují určité podmínky. Pomocí omezení kontroly můžete zadat výraz, který musí být vždy pravdivý pro každý řádek v tabulce. Například, HODNOCENÍ stolní obchodech platné hodnocení; omezit dostupné hodnoty mimo meze prosazovaná definice sloupce, můžete použít ZKONTROLUJTE, zda omezení, jak ukazuje následující seznam:

sloupec úroveň, ZKONTROLUJTE omezení, nelze odkazovat na hodnoty v jiných řádků; to nemůže použít pseudo-sloupce jako SYSDATE, UŽIVATELE, CURRVAL, NEXTVAL, LEVEL, a ROWNUM. Formulář omezení tabulky (na rozdíl od formuláře omezení sloupce) můžete použít k označení více sloupců v omezení kontroly.

pojmenování omezení

můžete pojmenovat omezení. Pokud pro názvy omezení použijete efektivní schéma pojmenování, budete lépe schopni identifikovat a spravovat omezení. Název omezení by měl identifikovat tabulku, na kterou působí, a typ omezení, které představuje. Například primární klíč v tabulce potíží může být pojmenován TROUBLE_PK.

při vytváření omezení můžete zadat název omezení. Pokud nezadáte název omezení, Oracle vygeneruje název. Většina generovaných názvů omezení Oracle je ve tvaru SYS_C###### (například SYS_C000145). Protože název omezení generovaný systémem Vám neříká nic o tabulce nebo omezení, měli byste pojmenovat svá omezení.

v následujícím příkladu je vytvořeno a pojmenováno omezení primárního klíče jako součást příkazu Vytvořit tabulku pro tabulku problémů (všimněte si klauzule omezení):

klauzule omezení příkazu CREATE TABLE pojmenuje omezení (v tomto případě TROUBLE_PK). Tento název omezení můžete použít později, když povolíte nebo zakázáte omezení.