7599
Обмеження. Postgre SQL.
Лекция
Информатика, кибернетика и программирование
Обмеження Postgre SQL має декілька варіантів обмеження даних (constraint), які впливають на операції вставки і оновлення. Розглянемо один із них, який полягає в установці обмеженьдля таблиць і полів.Обмеженням є особливий атри...
Украинкский
2013-01-26
60 KB
2 чел.
Обмеження
Postgre SQL має декілька варіантів обмеження даних (constraint), які впливають на операції вставки і оновлення. Розглянемо один із них, який полягає в установці обмежень для таблиць і полів. Обмеженням є особливий атрибут таблиці, який встановлює критерії допустимості для вмісту її полів. Дотримання цих правил допомагає запобігти заповненню бази помилковими або невідповідними даними. Обмеження задаються в секції CONSTRAINT при створенні таблиці командою CREATE TABLE. Обмеження полів завжди стосуються лише одного поля, тоді як обмеження таблиць можуть встановлюватися як для одного, так і для декількох полів. У команді CREATE TABLE обмеження полів задаються відразу ж після визначення поля, тоді як обмеження таблиці встановлюється в спеціальному блоці, виділеному комами від усіх визначень полів.
Опис обмеження поля виглядає так:
[ CONSTRAINT обмеження]
{ NOT NULL| UNIQUE | PRIMARY KEY | DEFAULT значення CHECK (умова )|
REFERENCES таблиця [ ( поле) ]
[ MATCH FULL | MATCH PARTIAL ]
[ ON DELETE операція]
[ ON UPDATE операція]
[ DEFERRABLE | NOT DEFERRABLE ]
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]}
Визначення обмеження слідує в команді CREATE TABLE відразу ж за типом обмежуваного поля і передує комі, яка відокремлює його від наступного поля. Обмеження можуть встановлюватися для будь-якої кількості полів, а ключове слово CONSTRAINT і ідентифікатор обмеження не обовязкові.
Існує шість типів обмежень полів, які задаються за допомогою спеціальних ключових слів. Деякі з них побічно встановлюються при створені обмежень іншого типу. Типи обмежень полів перераховані нижче, вони такі:
REFERENCES таблиця [(поле)]. Вхідні значення обмежуваного поля порівнюються із значеннями іншого поля в заданій таблиці. Якщо збіги відсутні, то команда INSERT або UPDATE завершується невдачею. Якщо параметр поле не вказаний, то перевірка виконується за первинним ключем. Обмеження REFERENCES подібне до обмеження таблиці FOREIGN KEY, яке описане в наступному пункті цього підрозділу. Дійсно, між цими обмеженнями є багато спільного. Приклад таблиці, створеної з обмеженням FOREIGN KEY, приведений у лістингу 7.8;
MATCH FULL | MATCH PARTIAL. Секція MATCH указує, чи дозволяється змішувати значення NULL і звичайні значення при вставці в таблицю, у якої зовнішній ключ посилається на декілька полів. Таким чином, на практиці секція MATCH приносить користь лише в обмеженнях таблиць, хоча формально вона може використовуватися і при обмеженні полів. Конструкція MATCH FULL забороняє вставку даних, у яких частина полів зовнішнього ключа містить псевдозначення NULL (крім випадку, коли NULL міститься у всіх полях). У PostgreSQL 7.1.x конструкція MATCH PARTIAL не підтримується. Якщо секція MATCH відсутня, то вважається, що поля з псевдозначепиями NULL задовільняють обмеження. Також буде доречно нагадати, що обмеження полів стосується лише одного поля, тому секція MATCH використовується лише в обмеженнях таблиць;
ON DELETE операція. При виконанні команди DELETE для заданої таблиці з обмежуваним полем виконується одна з таких операцій:
N0 ACTION (якщо видалення спричиняє порушення цілісності посилань, то відбувається помилка; використовується за замовчуванням, якщо операція не вказана),
RESTRICT (аналогічно N0 ACTION),
CASCADE (видалення всіх записів, що містять посилання на запис, який видаляється),
SET NULL (поля, що містять посилання на запис, який видаляється, замінюються псевдозначеннями NULL),
SET DEFAULT (полям, що містять посилання на запис, який видаляється, привласнюється значення за замовчуванням);
ON UPDATE операція. При виконанні команди UPDATE для заданої таблиці виконується одна з вищеописаних операцій. За замовчуванням використовується значення N0 ACTION. Якщо вибрана операція CASCADE, всі записи, які містять посилання на оновлюваний запис, оновлюються новим значенням (замість видалення, як у випадку з ON DELETE CASCADE);
DEFERRABLE | NOT DEFERRABLE. Значення DEFERRABLE дозволяє відкласти виконання обмеження до кінця транзакції (замість негайного виконання після завершення команди). Значення NOT DEFERRABLE означає, що обмеження завжди перевіряється відразу ж після завершення чергової команди. В цьому випадку користувач не може відкласти перевірку обмеження до кінця транзакції. За замовчуванням вибирається саме цей варіант;
INITIALLY DEFERRED | INITIALLY IMMEDIATE. Секція INITIALLY задається для обмежень, визначених з ключовим словом DEFERRED. Значення INITIALLY DEFERRED відкладає перевірку обмеження до кінця транзакції, а при установці значення INITIALLY IMMEDIATE перевірка проводиться після кожної команди. За відсутності секції INITIALLY за замовчуванням використовується значення INITIALLY IMMEDIATE. У прикладі нижче показано створення таблиці gazpr з декількома обмеженнями.
CREATE TABLE gazpr
(kod_g integer PRIMARY KEY CHECK (kod_g > 0),
naz_g CHARACTER(80) NOT NULL,
kilnyt INTEGER CHECK (kilnyt > 1),
diam INTEGER);
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'gazpr_pkey' for table 'gazpr'
Тут створюється поле kod_g типу integer, для якого встановлюються обмеження PRIMARY KEY і CHECK. Обмеження PRIMARY KEY також має на увазі обмеження NOT NULL і UNIQUE і зумовлює автоматичне створення індекса gazpr_pkey для обмежуваного поля. Обмеження CHECK гарантує, що значення поля kod_g завжди буде додатнє, а поля kilnyt більше за одиницю. Це означає, що будь-які спроби вставки або оновлення в таблиці gazpr записів, поле kod_g яких менше або дорівнює 0, завершуються невдачею.
Таблиця gazpr також містить текстове поле naz_g, для якого встановлено обмеження NOT NULL. Воно забороняє мати в таблиці записи, поле naz_g яких містить NULL. Інакше кажучи, це поле обовязкове для заповнення.
Обмеження таблиць подібні до обмежень полів, але на відміну від них, можуть стосуватися відразу декількох полів таблиці.
Нижче створюються дві таблиці: gazpr і oblik з трьома обмеженнями:
CREATE TABLE gazpr
(kod_g INTEGER,
naz_g CHARACTER(80),
kilnyt INTEGER,
diam INTEGER,
CONSTRAINT aaa PRIMARY KEY (kod_g),
CONSTRAINT bbb CHECK (kilnyt IS NOT NULL AND diam IS NOT NULL);
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'pkey' for table 'gazpr'
CREATE TABLE oblik
(kod_g INTEGER,
kod_p INTEGER,
data DATE,
kilk REAL,
CONSTRAINT ccc FOREIGN KEY (kod_g)
REFERENCES gazpr(kod_g)
ON DELETE CASCADE
ON UPDATE CASCADE);
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
Перше обмеження, aaa належить до типу PRIMARY KEY і встановлюється для поля kod_g. Воно практично не відрізняється від обмеження PRIMARY KEY для поля, оскільки список у даному прикладі складається всього з одного поля.
Обмеження bbb гарантує, що поля kilnyt і diam не буде містити псевдозначення NULL.
Нарешті, обмеження ccc таблиці oblik за допомогою конструкцій FOREIGN KEY і REFERENCES гарантує, що значення поля kod_g таблиці oblik зустрічаються і в полі kod_g таблиці gazpr. Більш того, оскільки в секціях ON DELETE і ON ACTION зустрічається ключове слово CASCADE, будь-які модифікації поля kod_g в таблиці gazpr спричинять каскадні зміни записів у таблиці oblik, а при видаленні записів з таблиці gazpr будуть видалені відповідні записи таблиці oblik.
Для цих обмежень в базі даних автоматично будується індекс gazpr_pkey для поля kod_g, а також створюється тригер. Індекс забезпечує виконання обмеження PRIMARY KEY таблиці gazpr, а тригер належить до обмеження FOREIGN KEY таблиці oblik. Про застосування тригерів буде сказано пізніше у відповідному розділі.
Зауважимо, що деякі версії PostgreSQL забезпечують лише додавання обмежень CHECK і FOREIGN KEY.
Вибір режиму перевірки обмежень забезпечує команда:
SET CONSTRAINTS { ALL | режим [.... ] } { DEFERRED | IMMEDIATE }
Параметри:
ALL означає, що вказаний режим повинен стосуватися всіх обмежень;
режим імя обмеження, для якого встановлюється режим перевірки;
DEFERRED перевірка обмежень (або конкретного обмеження) вікладається до
момента фіксації транзакції, тобто до виконання команди COMMIT;
IMMEDIATE всі або конкретне обмеження перевіряються наприкінці кожної команди.
Команда SET CONSTRAINTS задає режим перевірки для всіх обмежень або одного обмеження в поточному транзакційному блоці. Існує два режими перевірки: негайна (IMMEDIATE) і відкладена (DEFERRED) перевірка обмежень. У режимі IMMEDIATE всі обмеження перевіряються після виконання кожної команди транзакції, а в режимі DEFERRED обмеження перевіряються лише після виконання команди COMMIT.
Зауважимо, що деякі версії PostgreSQL забезпечують зміну режиму перевірки тільки для обмеження FOREIGN KEY. Команда SET CONSTRAINTS не разповсюджується на обмеження CHECK і UNIQUE
Нижченаведена команда вибирає режим негайної перевірки всіх обмежень.
SET CONSTRAINTS ALL IMMEDIATE;
А также другие работы, которые могут Вас заинтересовать | |||
30995. | Расчёты объёмов вентиляции по углекислоте и влажности в свинарнике | 162 KB | |
Комплексы по выращиванию и откорму свиней должны находиться на режиме предприятий закрытого типа. В производственную зону комплекса запрещается вход посторонним лицам и въезд на территорию транспорта, не связанного с обслуживанием комплекса. Обслуживающему персоналу разрешается вход на территорию комплекса только через санпропускник, а въезд транспорта- через дезинфекционно- промывочное помещение (дезбарьер). | |||
30996. | Какие изменения в кормах могут возникнуть вследствие влияния на них неблагоприятной погоды | 85.12 KB | |
Расчетная часть. При выполнении курсовой работы нужно дать ответы на такие вопросы: Определить часовой объем вентиляции. Сравнить приходную и расходную части теплового баланса и определить ∆t теплового баланса. У людей от хлеба со спорыньей бывают судороги общий паралич и часто смерть. | |||
30997. | ЭКОНОМИКА ОРГАНИЗАЦИИ | 93.5 KB | |
Целью выполнения курсовой работы является расширение и углубление знаний обучающихся по дисциплине «Экономика организации», овладение практическими навыками расчетов экономических показателей, характеризующих состояние организации и эффективность осуществляемой ею деятельности, формирование умения анализировать и оценивать полученные результаты. | |||
30998. | Создание эффективно работающей компьютерной сети для организации “Х” в которой находится 29 ПЭВМ | 555.31 KB | |
Выбор топологии сети типа кабеля и видов необходимого коммуникационного оборудования. Структурная схема вычислительной сети и описание принципов работы.Уязвимость сетис. Сетевые концентраторы также могут иметь связь друг с другом объединяя вместе подсети различных участков здания. | |||
30999. | Форма, содержание и ответственность кредитного договора | 170 KB | |
Предмет кредитного договора. Форма содержание и ответственность кредитного договора. Форма кредитного договора. Содержание кредитного договора. Ответственность по кредитному договору. Виды кредитного договора... | |||
31000. | Психосоматика, отношения и здоровье | 773.5 KB | |
Отношения в нашей жизни занимают центральное место. Даже если на этот вопрос ответить положительно это повлечет за собой новый вопрос: А в чем этот смысл Как и всегда в жизни ответ на вопрос зависит от индивидуальной точки зрения. В прежние времена оно служило существенным основанием совместной жизни двух людей. В этой книге мы рассмотрим вопрос о смысле партнерства в широком аспекте и мы рассмотрим этот вопрос не сам по себе а свяжем его с вопросом о смысле жизни. | |||
31001. | Лабораторные исследования мочи | 4.32 MB | |
Исследования физических свойств мочи. У КРС и лошадей пробу мочи обычно получают при естественном акте мочеиспускания. У быков для ускорения получения мочи можно приложить к отверстию препуция ватный тампон смоченный тёплой водой. | |||
31002. | История физической культуры и спорта | 231 KB | |
Введение в предмет История физической культуры.Дисциплина которую нам предстоит изучить История физической культуры и спорта. Роль физической культуры состояла также в удовлетворении потребностей общества в культурнозрелищных мероприятиях. | |||