Главная » Разработка для Android » Ограничения, определяемые для базы данных в Android приложении

0

 

Ограничения, определяемые для базы данных (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 2.2 нельзя полагаться на ограничение по внешнему ключу для отлавливания недействительных ссылок на внешние ключи. Поэтому, создавая схемы баз данных, использующие внешние ключи, нужно действовать особенно тщательно.

Существует еще несколько ограничений, эффекты от применения которых менее масштабны.

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

NOT NULL – не допускает, чтобы какое-либо значение в данном столбце было равно NULL. Обратите внимание: первичный ключ одновременно удовлетворяет условиям UNIQUE и NOT NULL.

CHECK – принимает булево выражение и требует, чтобы данное выражение возвращало true для любого значения, вставляемого в столбец. Пример – атрибут CHECK (annual_salary > 0), показанный выше в таблице employees.

Источник: Android. Программирование на Java для нового поколения мобильных устройств

По теме:

  • Комментарии