Обмеження, які визначаються для бази даних в Android додатку

&nbsp

Обмеження, які визначаються для бази даних (database constraints) – це особливі атрибути, що привласнюються для її таблиць Деякі обмеження є інформаційно-орієнтованими, наприклад вимагають, щоб всі значення в стовпці були унікальними Такий, наприклад, буде стовпець з номерами страхових полісів Інші обмеження характеризуються більш функціональними властивостями Основу межтаблічних звязків складають реляційні обмеження PRIMARY KEY і FOREIGN KEY

У більшості таблиць повинен бути присутнім спеціальний стовпець, який унікально ідентифікує кожну окремо взяту рядок У SQL такий стовпець називається PRIMARY KEY Як правило, він використовується тільки як ідентифікатор кожного рядка На відміну, наприклад, від номера страхового поліса він не має ніякого додаткового значення Тому немає потреби задавати значення для даного стовпця Замість цього можна дозволити SQLite привласнювати прирощується цілочисельні значення додаються в таблицю новим рядках В інших базах даних для досягнення аналогічного результату звичайно потрібно спеціально відзначити такий стовпець як автоінкрементний У SQLite також пропонується явне обмеження AUTOINCREMENT, але первинні ключі (PRIMARY KEY) є Автоінкрементний за замовчуванням Прирощується значення в цьому стовпці функціонально нагадують покажчики на неявні обєкти (opaque pointers), присутні в таких високорівневих мовах, як Java або С: інші таблиці баз даних і код високорівневого мови можуть використовувати даний стовпець для посилання на конкретну рядок

Коли рядки баз даних мають унікальні первинні ключі, можна почати замислюватися про залежності між таблицями Наприклад, таблиця, використовувана для зберігання даних про співробітників, може визначити стовпець з цілочисельними значеннями під назвою empl oyer_id У цьому стовпці міститимуться значення первинних ключів рядків іншої таблиці, employers (ця таблиця буде містити дані про роботодавців) Якщо виконати запит і вибрати одну або більше рядків з таблиці empl oyers, то можна зібрати ідентифікаційні номери роботодавців і переглянути співробітників в таблиці employees по стовпці employeMd Так програма може знаходити співробітників, зайнятих у певного роботодавця Дві розглянуті таблиці (ми скоротили їх до декількох стовпців, важливих для даного конкретного прикладу) можуть виглядати так:

Ідея таблиці, що посилається на первинний ключ іншої таблиці, формально підтримується в SQL як обмеження FOREIGN KEY, що гарантує валідність межтаблічних посилань Дане обмеження повідомляє базі даних, що цілочисельні значення в стовпці з обмеженням по зовнішньому ключу (foreign key constraint) повинні посилатися на валідниє первинні ключі рядків бази даних, що відносяться до іншої таблиці Отже, якщо вставити в таблицю employees такий рядок, чий employeMd відсутня в таблиці employers, то в багатьох різновидах SQL ви отримаєте повідомлення про порушення обмеження Однак у SQLite обмеження по зовнішньому ключу є необовязковим, і в Android воно відключене Наприклад, у версії Android 22 не можна покладатися на обмеження по зовнішньому ключу для відлову недійсних посилань на зовнішні ключі Тому, створюючи схеми баз даних, що використовують зовнішні ключі, потрібно діяти особливо ретельно

Існує ще кілька обмежень, ефекти від застосування яких менш масштабні

UNIQUE-таке обмеження вимагає, щоб значення конкретного стовпця відрізнялося від всіх інших значень даного стовпця в усіх наявних рядках Діє при кожній вставці нового рядка або оновленні існуючої Будь-яка операція вставки або оновлення, при якій відбувається спроба занести в таблицю значення-дубль, порушує обмеження SQLite

NOT NULL – не допускає, щоб яке-небудь значення в цьому стовпці дорівнювало NULL Зверніть увагу: первинний ключ одночасно задовольняє умовам UNIQUE і NOT NULL

CHECK – приймає булево вираз і вимагає, щоб даний вираз повертало true для будь-якого значення, що вставляється в стовпець Приклад – атрибут CHECK (annual_salary> 0), показаний вище в таблиці employees

Джерело: Android Програмування на Java для нового покоління мобільних пристроїв

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*