Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠœΠΈΡ€ InterBase. АрхитСктура, администрированиС ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Π² InterBase/FireBird/YaffilΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 11

Автор А Ковязин

ΠœΡ‹ рассмотрСли нСсколько способов ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ индСксов. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄ ALTER INDEX ΠΈ DROP/CREATE INDEX ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ индСксы, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ систСмных, создаваСмых автоматичСски индСксов, слуТащих для поддСрТания ссылочной цСлостности. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ эти индСксы, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ измСнСния ΠΈ создания Ρ‚Π°Π±Π»ΠΈΡ† - ALTER TABLE ΠΈ CREATE TABLE, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ эти индСксы ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Π­Ρ‚Π° Π³Π»Π°Π²Π° посвящСна ограничСниям Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… InterBase. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, - это ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ взаимосвязи ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ эти ΠΏΡ€Π°Π²ΠΈΠ»Π° Π² Π²ΠΈΠ΄Π΅ особых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Π“Π»Π°Π²Π½ΠΎΠ΅ прСимущСство использования ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ состоит Π² возмоТности Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΈ Ρ‡Π°ΡΡ‚ΡŒ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ прилоТСния Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚. Π΅. Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Π΅Π΅, Π° Π·Π½Π°Ρ‡ΠΈΡ‚, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Π΅Π΅.

Часто Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Π³Π°ΡŽΡ‚ использованиСм ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, считая, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡΡ‚Π΅ΡΠ½ΡΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ творчСства. Однако Π½Π° самом Π΄Π΅Π»Π΅ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅ происходит ΠΎΡ‚ нСдостаточного знания Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ проСктирования Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ….

Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ сСбС ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ использования Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, Π·Π° счСт Ρ‡Π΅Π³ΠΎ ΠΈΡ… прилоТСния Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Π²Π°ΡŽΡ‚ Π² быстродСйствии. ΠžΠΏΡ‹Ρ‚ высококвалифицированных Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² позволяСт ΠΈΠΌ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ сСрвСра ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² слоТных случаях, поэтому Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ программистам InterBase Π»ΡƒΡ‡ΡˆΠ΅ Π½Π΅ Π°ΠΏΠ΅Π»Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ дСйствиям ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅Π³.

Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ ΠΌΡ‹ Π½Π΅ рассматриваСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, поэтому для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎ этому вопросу слСдуСт ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ списку Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ½ΠΈΠ³ΠΈ. Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ ΠΌΡ‹ лишь ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ ΠΎΠ±Π·ΠΎΡ€ всСх Π²ΠΈΠ΄ΠΎΠ² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… InterBase ΠΈ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΡ… примСнСния.

Π’ΠΈΠ΄Ρ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²ΠΈΠ΄Ρ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… InterBase:

* ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ - PRIMARY KEY;

* ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ - UNIQUE KEY;

* внСшний ΠΊΠ»ΡŽΡ‡ - FOREIGN KEY

- ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ автоматичСскиС Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹ ON UPDATE ΠΈ ON DELETE;

* ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ - CHECK.

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π³Π»Π°Π²Π°Ρ… ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈΡΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· этих ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ³ΠΎ излоТСния ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°, Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ рассмотрим ΠΈΡ… синтаксис, ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π±Ρ‹Π²Π°ΡŽΡ‚ Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ² - Π½Π° основС ΠΎΠ΄Π½ΠΎΠ³ΠΎ поля ΠΈ Π½Π° основС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Бинтаксис ΠΎΠ±ΠΎΠΈΡ… Π²ΠΈΠ΄ΠΎΠ² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π½ΠΈΠΆΠ΅.


<col_constraint> = [CONSTRAINT constraint] <constraint_def>

[ <col_constramt> . . . ]

<constraint_def> = {UNIQUE | PRIMARY KEY

| CHECK ( <search_condition>)

| REFERENCES other_table [( other_col [, other_col ...])]

[ON DELETE (NO ACTION|CASCADE|SET DEFAULT|SET NULL}]

[ON UPDATE (NO ACTION CASCADEjSET DEFAULTjSET NULL}]

}


Для ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° основС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ синтаксис ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:


<tconstraint> = [CONSTRAINT constraint] <tconstraint_def>

[< tconstraint> ...]

<tconstraint_def> = {{PRIMARY KEY | UNIQUE} ( col [, col ...] )

FOREIGN KEY ( col [, col ...] ) REFERENCES other_table [ ( other_col [ , other_col ...] ) ]

[ON DELETE (NO ACTION|CASCADE SET DEFAULT|SET NULL}] [ON UPDATE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]

| CHECK ( <search_condition>)}


Π Π°Π·Π½ΠΈΡ†Π° Π² синтаксисС ΠΌΠ΅ΠΆΠ΄Ρƒ ограничСниями Π½Π° основС ΠΎΠ΄Π½ΠΎΠ³ΠΎ поля ΠΈ Π½Π° основС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π° - Π² послСдних ΠΌΠΎΠ»Π΅Π½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ нСсколько ΠΏΠΎΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ входя i Π² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅. Π’ сд\Ρ‡Π°Π΅ ограничСния Π½Π° основС ΠΎΠ΄Π½ΠΎΠ³ΠΎ поля всС описанныС ΠΎΠΏΡ†ΠΈΠΈ относятся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ полю.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρƒ этих Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ отличаСтся способ ΠΈΡ… примСнСния: ограничСния Π½Π° основС ΠΎΠ΄Π½ΠΎΠ³ΠΎ поля просто Π΄ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ поля, Π° ограничСния Π½Π° основС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ Π² ΠΎΠ±Ρ‰Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… этой Π³Π»Π°Π²Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠ³ΠΎ ограничСния

ЀактичСски ограничСния Π½Π° основС ΠΎΠ΄Π½ΠΎΠ³ΠΎ поля ΡΠ²Π»ΡΡŽΡ‚ΡΡ частным сл\Ρ‡Π°Π΅ΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° основС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ создания ограничСния ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° с использованиСм этих Π΄Π²ΡƒΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π½ΠΈΠΆΠ΅. Π”Π°Π²Π°ΠΉΡ‚Π΅ создадим Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅ ΠΈ Π½Π°Π»ΠΎΠΆΠΈΠΌ Π½Π° Π½Π΅Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°.

ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ с использованиСм синтаксиса ограничСния Π½Π° основС ΠΎΠ΄Π½ΠΎΠ³ΠΎ поля.


CREATE TABLE testl(

ID_PK INTEGER CONSTRAINT pktest NOT NULL PRIMARY KEY) ;


Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создаСтся ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ с ΠΈΠΌΠ΅Π½Π΅ΠΌ pktest Π½Π° ΠΏΠΎΠ»Π΅ ID_PK. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ вСсьма ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΠ΅ описаниС Π² ΠΎΠ΄Π½Ρƒ строчку.

Для Ρ‚ΠΎΠΉ ΠΆΠ΅ самой Ρ†Π΅Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ синтаксисом ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° основС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ:


CREATE TABLE test2(

ID_PK INTEGER NOT NULL,

CONSTRAINT pktst PRIMARY KEY (ID_PK));

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим созданиС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅. ΠŸΠ΅Ρ€Π²ΠΎΠΉ Π² описании ΠΎΠ±Ρ‰Π΅Π³ΠΎ синтаксиса ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΈΠ΄Π΅Ρ‚ опция [CONSTRAINT constraint]. Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, эта опция взята Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки ΠΈ, Π·Π½Π°Ρ‡ΠΈΡ‚, Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой ΠΎΠΏΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ имя создаваСмому ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡŽ ΠΈ Π² случаС использования синтаксиса ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° основС ΠΎΠ΄Π½ΠΎΠ³ΠΎ поля, ΠΈ Π² случаС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° основС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ.

Если Π½Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя для ограничСния, InterBase автоматичСски сгСнСрируСт Π΅Π³ΠΎ. Но Π»ΡƒΡ‡ΡˆΠ΅ всС ΠΆΠ΅ явно Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ имя создаваСмому ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ схСмы Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ограничСниями Π² дальнСйшСм.

Назначив имя ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡŽ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ‚ΠΈΠΏ. Рассмотрим Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π² Ρ‚ΠΎΠΌ порядкС, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π² описании ΠΎΠ±Ρ‰Π΅Π³ΠΎ синтаксиса ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ.

ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ΠΈ

ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· основных Π²ΠΈΠ΄ΠΎΠ² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Они ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ для ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ записСй Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Допустим, ΠΌΡ‹ Ρ…Ρ€Π°Π½ΠΈΠΌ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… список людСй. Π’ΠΏΠΎΠ»Π½Π΅ вСроятно, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π΄Π²Π° (ΠΈΠ»ΠΈ большС) Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ Ρ„Π°ΠΌΠΈΠ»ΠΈΠ΅ΠΉ, ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ отчСством Как ΠΆΠ΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ (ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ. Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π½Π° основании ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, хранящСйся Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…)?

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС "Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ" прСдставлСн ΠΎΠ΄Π½ΠΎΠΉ записью Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, поэтому ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠΌ вопросом β€” ΠΊΠ°ΠΊ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ запись Π² (любой) Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ записи Π² этой ΠΆΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ограничСния - ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠΏΠΎΡ‡ΠΈ. ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ прСдставляСт собой ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько ΠΏΠΎΠ»Π΅ΠΉ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, сочСтаниС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи. Для ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π΅ сущСствуСт ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°.

Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΡ‡ΠΎΡ‡ΠΈ нСсут Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ - ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ слуТат для ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ записСй Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΎΡ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½, Π° ΡƒΠ½ΠΈΠΊΠ°Ρ‚ΡŒΠ½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ - нСсколько. Надо ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Π² качСствС ссылочной основы для Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ (см. Π΄Π°Π»Π΅Π΅).

Бинтаксис создания ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° Π½Π° основС СдинствСнного поля ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:


<pkukconstraint> = [CONSTRAINT constraint] {PRIMARY KEY |

UNIQUE}


ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ:


CREATE TABLE pkuk(

pk NUMERIC(15,0) NOT NULL PRIMARY KEY, /*ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡*/

ukl VARCHAR(SO) NOT NULL UNIQUE,/*ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ */

uk2 INTEGER NOT NULL UNIQUE /* Π΅Ρ‰Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ */);


Бинтаксис создания ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π½Π° основС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ:


<pkuktconstraint> = [CONSTRAINT constraint] {PRIMARY KEY |

UNIQUE) ( col [, col ...] )


Π’Π°ΠΊΠΎΠΉ синтаксис позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ Π½Π° основС ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΉ. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ создания ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ:


CREATE TABLE pkuk2(

Number1 INTEGER NOT NULL,

Namel VARCHAR(SO) NOT NULL,

Kol INTEGER NOT NULL,

Stoim NUMERIC(15,4) NOT NULL,

CONSTRAINT pkt PRIMARY KEY (Numberl, Namel), /*ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ pkt Π½Π°

основС Π΄Π²ΡƒΡ… ΠΏΠΎΠ»Π΅ΠΉ*/

CONSTRAINT uktl UNIQUE (kol, Stoim) ); /*ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ uktl Π½Π° основС

Π΄Π²ΡƒΡ… ΠΏΠΎΠ»Π΅ΠΉ*/


ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ всС поля, входящиС Π² состав ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΊ NOT NULL, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ эти ΠΊΠ»ΡŽΡ‡ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ значСния.

Помимо создания ограничСния ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ создания Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ имССтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ограничСния Π² ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ DDL: ALTER TABLE. Бинтаксис добавтСния ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ описанному Π²Ρ‹ΡˆΠ΅:


ALTER TABLE tablename

ADD [CONSTRAINT constraint] {PRIMARY KEY | UNIQUE) ( col [, col ...] )


Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ создания ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ALTER TABLE. Π‘Π½Π°Ρ‡Π°Π»Π° создаСм Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ:


CREATE TABLE pkalter(

ID1 INTEGER NOT NULL,

ID2 INTEGER NOT NULL,

UID VARCHAR(24));


Π—Π°Ρ‚Π΅ΠΌ добавляСм ΠΊΠ»ΡŽΡ‡ΠΈ. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ:


ALTER TABLE pkalter

ADD CONSTRAINT pkall PRIMARY KEY (idl, id2);