C# - A sysconstraints rendszertábla

MS SQL rendszertáblák 3. rész

forráskód letöltése
A cikksorozatnak ebben a számában a sysconstraints rendszertáblával foglalkozunk részletesebben, mely szintén minden létrejövő adatbázisban megtalálható. Az adatbázis adatairól szólunk részletesen, valamint egy példán keresztül ismertetjük, hogyan integrálódik a rendszer egészébe, milyen kapcsolatban van más rendszertáblákkal.
A példához szükséges a SampleDatabase03 adatbázis, melyet a mellékelt SampleDatabase03.sql lefuttatásával hozhatunk létre. A SampleDatabase03.sql script 5. sorában adja meg helyesen a létrehozandó adatbázisfájlok mappájának nevét és elérési útvonalát.
Mint a rendszertáblák mindegyikéről, a sysconstraints rendszertábláról is elmondható és hangsúlyozandó, hogy közvetlenül lehetőleg ne kerüljön sor a módosítására. A rendszer tábláinak manuális módosítása be nem látható következményekkel járhat, a rendszer integritása sérülést szenvedhet, mely végső soron a rendszer működésének zavarait okozhatja.
A sysconstraints rendszertábla, mint ahogy azt neve is elárulja, az adatbázis tábláiban deklarált tábla –, és oszlopszintű megszorításokkal kapcsolatban tartalmaz egy-egy bejegyzést. Ide tartoznak a PRIMARY KEY, FOREIGN KEY, UNIQUE KEY megszorítások, valamint a CHECK és DEFAULT megszorítások. A sysconstraints tábla legfőképpen az ugyancsak minden létrejövő adatbázisban megtalálható rendszertáblával, a sysobjects táblával áll szoros kapcsolatban. Tartalmaz ugyanis egy azonosítót arra vonatkozóan, hogy a sysobjects táblában bejegyzett objektumok közül melyikhez kapcsolódik, röviden melyik táblához (oszlophoz) tartozik. Oszlopai sorban a következők:
Sorszám Oszlop neve Típusa Leírás
1 constid int A megszorítás azonosítója.
2 id int A megszorítást birtokló tábla azonosítója, mely az objektumot azonosítja a sysobjects táblában.
3 colid smallint Annak az oszlopnak az azonosítója, melyre a megszorítás vonatkozik. 0, amennyiben a megszorítás tábla szintű.
4 spare1 tinyint Fenntartott.
5 status int Egy bitminta jelzi a megszorítás státuszát. Lehetséges értékei:1 - PRIMARY KEY megszorítás, 2 - UNIQUE KEY megszorítás, 3 - FOREIGN KEY megszorítás, 4 - CHECK megszorítás, 5 - DEFAULT megszorítás, 16 – oszlop szintű megszorítás, 32 – tábla szintű megszorítás
6 actions int Fenntartott.
7 error int Fenntartott.
A mellékelt példában azt modellezzük, hogy miként kerülhet új bejegyzés a sysconstraints táblába. A SampleDatabase03.sql script lefuttatása után egy Table1 nevű adattábla kerül be az adatbázisba. Adatokat nem tartalmaz, hiszen nem is ez a lényeg. A tábla létrehozásának SQL utasítása:
CREATE TABLE [Table1]
(
  [ItemID] [int] NOT NULL,
  [ItemName] [varchar] (50) NOT NULL
)ON [PRIMARY]
A tábla első, ItemID nevű oszlopára hozunk létre egy PRIMARY KEY megszorítást, a következőképpen.
Az alkalmazás Form-ja két DataGrid komponensben jeleníti meg a lényeges információkat. A felső sorai tartalmazzák a sysconstraint rendszertábla aktuális állapotát, míg az alsó DataGrid komponens a sysobjects tábla azon sorát, amely a megszorítással kapcsolatban további információkat tárol.
A script lefutásakor bekerül az adatbázisba két tárolt eljárás, melyek a megszorítás létrehozását, illetve törlését végzik. A létrehozásért a MakeConstraints, míg a törlésért a DropConstraints nevű tárolt eljárás a felelős. Az alkalmazásban az „Insert” feliratú gombbal indítható a megszorítás létrehozásának művelete, míg a „Drop” feliratú gombbal törölhető az adott megszorítás. A megszorítás „PK_Table1” néven kerül létrehozásra a tárolt eljárás magjában a következőképpen:
ALTER TABLE dbo.Table1 ADD CONSTRAINT
PK_Table1 PRIMARY KEY CLUSTERED
(
  ItemID
)ON [PRIMARY]
A törlés pedig egy rövid ellenőrzés után a következő kóddal érhető el a DropConstraints eljárásban:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[PK_Table1]') and OBJECTPROPERTY(id, N'IsPrimaryKey') = 1)
alter table Table1
drop constraint PK_Table1
A megszorítás létrehozásakor tehát két bejegyzés kerül a rendszertáblákba. Az első a sysconstraints táblába, mely így mutat:
1 2 3 4 5 6 7
85575343 1977058079 0 0 2593 4096 0
A második bejegyzés pedig a sysobjects kerül, melyből a fontosabb oszlopok a következők:
1 2 3 4 5
PK_Table1 85575343 PK 1977058079 2002.11.19 0:03
Az oszlopok magyarázata a következő:
  • 1 : A megszorítás neve karakteresen
  • 2 : A megszorítás egyedi azonosítója, mely a sysconstraints táblában azonosítja a megszorítást
  • 3 : A megszorítás kódja (a rövidítés a PRIMARY KEY-re utal)
  • 4 : A megszorítást birtokló tábla (jelen esetben a Table1) egyedi azonosítója
  • 5 : A megszorítás létrehozásának ideje

MS SQL Server rendszertáblái cikksorozat