Классика баз данных - статьи

       

Обязательно ли нужно определять схему




Комплексные данные



Обязательно ли нужно определять схему перед заполнением базы данных? Исторически существовал канонический ответ "да". Основные причины были две. Во-первых, определение схемы базы данных по существу помогало контролировать тип входных данных. Во-вторых, ограничение типа данных делало возможным ранним СУБД организовывать данные с максимальной эффективностью в использовании памяти и процессора. Однако, разработка схемы базы данных - наиболее трудоемкий процесс. Есть много ситуаций, связанных со сложными и непредсказуемыми данными, когда точное описание схемы - не требуется или необоснованно замедляет разработку проекта. Кроме того, обе перечисленные причины предопределения схемы в настоящее время не существуют: Контроль над входными данными должен осуществляться через поддержку входной формы, например через Javascript на стороне клиента Сети; влияние ограничения типа данных на скорость выполнения работы приближается к нулю с усовершенствованием технического оснащения современных систем баз данных.

Создание комплексных данных в большинстве существующих SQL ОРСУБД основано на предварительном определении схемы через определяемый пользователем тип (UDT - user-defined type). Таблица остается самой наглядной формой представления комплексных данных в любой ОРСУБД.

students











































id


name


course


first


last


st031


Jane


Hunter


Economy


Planning


st072


Richard


White


Computers in Engineering


Особенности приведенной выше таблицы следующие: Атрибут (или поле, или столбец) "name" состоит из "first" и "last" атрибутов; Одним из значений атрибута "course" является множество из элементов "Economy" и "Planning". Такая структура возможна, например, для IBM Informix SQL ().

CREATE ROW TYPE Student ( id CHAR(5), name ROW (first VARCHAR(12), last VARCHAR(20)), course SET (VARCHAR(128) NOT NULL) ); CREATE TABLE students OF TYPE Student; INSERT INTO students VALUES ( 'st031', ROW('Jane', 'Hunter'), SET('Economy', 'Planning') ); INSERT INTO students VALUES ( 'st072', ROW('Richard', 'White'), SET('Computers in Engineering') );


Содержание  Назад  Вперед