Схема базы данных включает в себя описания содержания, структуры и ограничений целостности , используемые для создания и поддержки базы данных .

Постоянные данные в среде базы данных включают в себя схему и базу данных. Система управления базами данных (СУБД) использует определения данных в схеме для обеспечения доступа и управления доступом к данным в базе данных .

Схема как структура базы данных

Схема базы данных (от англ. Database schema ) - её структура, описанная на формальном языке, поддерживаемом СУБД. В реляционных базах данных схема определяет таблицы , поля в каждой таблице (обычно с указанием их названия, типа, обязательности), и ограничения целостности (первичный , потенциальные и внешние ключи и другие ограничения).

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

Основными объектами графического представления схемы являются таблицы и связи, определяемые внешними ключами.

Видео по теме

Схема как объект базы данных

Есть и другое понятие схемы в теории баз данных.

В Oracle схема привязывается только к одному пользователю (USER) и является логическим набором объектов базы данных. Схема создаётся при создании пользователем первого объекта, и все последующие объекты, созданные этим пользователем, становятся частью этой схемы.

Схема может включать другие объекты, принадлежащие этому пользователю:

  • таблицы,
  • последовательности,
  • хранимые программы,
  • кластеры,
  • связи баз данных,
  • триггеры,
  • библиотеки внешних процедур,
  • индексы,
  • пакеты,
  • хранимые функции и процедуры,
  • синонимы,
  • представления,
  • снимки,
  • объектные таблицы,
  • объектные типы,
  • объектные представления.

Существуют и подобъекты схемы, такие как:

  • столбцы: таблиц и представлений,
  • секции таблиц,
  • ограничения целостности,
  • триггеры,
  • пакетные процедуры и функции и другие элементы, хранимые в пакетах (курсоры, типы и т. п).

Существуют объекты, независимые от схемы:

  • каталоги,
  • профили,
  • роли,
  • сегменты,
  • табличные области,
  • пользователи.

Уровни схемы базы данных

  • Концептуальная схема - карта концепций и их связей

Схемы используются в модели безопасности компонента Database Engine для упрощения взаимоотношений между пользователями и объектами, и, следовательно, схемы имеют очень большое влияние на взаимодействие пользователя с компонентом Database Engine. В этом разделе рассматривается роль схем в безопасности компонента Database Engine. В первом подразделе описывается взаимодействие между схемами и пользователями, а во втором обсуждаются все три инструкции языка Transact-SQL, применяемые для создания и модификации схем.

Разделение пользователей и схем

Схема - это коллекция объектов базы данных, имеющая одного владельца и формирующая одно пространство имен. (Две таблицы в одной и той же схеме не могут иметь одно и то же имя.) Компонент Database Engine поддерживает именованные схемы с использованием понятия принципала (principal). Как уже упоминалось, принципалом может быть индивидуальный принципал и групповой принципал.

Индивидуальный принципал представляет одного пользователя, например, в виде регистрационного имени или учетной записи пользователя Windows. Групповым принципалом может быть группа пользователей, например, роль или группа Windows. Принципалы владеют схемами, но владение схемой может быть с легкостью передано другому принципалу без изменения имени схемы.

Отделение пользователей базы данных от схем дает значительные преимущества, такие как:

    один принципал может быть владельцем нескольких схем;

    несколько индивидуальных принципалов могут владеть одной схемой посредством членства в ролях или группах Windows;

    удаление пользователя базы данных не требует переименования объектов, содержащихся в схеме этого пользователя.

Каждая база данных имеет схему по умолчанию, которая используется для определения имен объектов, ссылки на которые делаются без указания их полных уточненных имен. В схеме по умолчанию указывается первая схема, в которой сервер базы данных будет выполнять поиск для разрешения имен объектов. Для настройки и изменения схемы по умолчанию применяется параметр DEFAULT_SCHEMA инструкции CREATE USER или ALTER USER. Если схема по умолчанию DEFAULT_SCHEMA не определена, в качестве схемы по умолчанию пользователю базы данных назначается схема dbo .

Инструкция CREATE SCHEMA

В примере ниже показано создание схемы и ее использование для управления безопасностью базы данных. Прежде чем выполнять этот пример, необходимо создать пользователей базы данных Alex и Vasya, как будет описано в следующей статье (вы можете вернуться к этим примерам позже).

USE SampleDb; GO CREATE SCHEMA poco AUTHORIZATION Vasya GO CREATE TABLE Product (Number CHAR(10) NOT NULL UNIQUE, Name CHAR(20) NULL, Price MONEY NULL); GO CREATE VIEW view_Product AS SELECT Number, Name FROM Product; GO GRANT SELECT TO Alex; DENY UPDATE TO Alex;

В этом примере создается схема poco, содержащая таблицу Product и представление view_Product. Пользователь базы данных Vasya является принципалом уровня базы данных, а также владельцем схемы. (Владелец схемы указывается посредством параметра AUTHORIZATION . Принципал может быть владельцем других схем и не может использовать текущую схему в качестве схемы по умолчанию.)

Две другие инструкции, применяемые для работы с разрешениями для объектов базы данных, GRANT и DENY, подробно рассматриваются позже. В этом примере инструкция GRANT предоставляет инструкции SELECT разрешения для всех создаваемых в схеме объектов, тогда как инструкция DENY запрещает инструкции UPDATE разрешения для всех объектов схемы.

С помощью инструкции CREATE SCHEMA можно создать схему, сформировать содержащиеся в этой схеме таблицы и представления, а также предоставить, запретить или удалить разрешения на защищаемый объект. Как упоминалось ранее, защищаемые объекты - это ресурсы, доступ к которым регулируется системой авторизации SQL Server. Существует три основные области защищаемых объектов: сервер, база данных и схема, которые содержат другие защищаемые объекты, такие как регистрационные имена, пользователи базы данных, таблицы и хранимые процедуры.

Инструкция CREATE SCHEMA является атомарной. Иными словами, если в процессе выполнения этой инструкции происходит ошибка, не выполняется ни одна из содержащихся в ней подынструкций.

Порядок указания создаваемых в инструкции CREATE SCHEMA объектов базы данных может быть произвольным, с одним исключением: представление, которое ссылается на другое представление, должно быть указано после представления, на которое оно ссылается.

Принципалом уровня базы данных может быть пользователь базы данных, роль или роль приложения. (Роли и роли приложения рассматриваются в одной из следующих статей.) Принципал, указанный в предложении AUTHORIZATION инструкции CREATE SCHEMA, является владельцем всех объектов, созданных в этой схеме. Владение содержащихся в схеме объектов можно передавать любому принципалу уровня базы данных посредством инструкции ALTER AUTHORIZATION .

Для исполнения инструкции CREATE SCHEMA пользователь должен обладать правами базы данных CREATE SCHEMA. Кроме этого, для создания объектов, указанных в инструкции CREATE SCHEMA, пользователь должен иметь соответствующие разрешения CREATE.

Инструкция ALTER SCHEMA

Инструкция ALTER SCHEMA перемещает объекты между разными схемами одной и той же базы данных. Инструкция ALTER SCHEMA имеет следующий синтаксис.

Время от времени я заглядываю на Toster.ru и иногда даже отвечаю там на вопросы. Чаще всего люди спрашивают две вещи — как стать программистом и как правильно спроектировать схему базы данных. Мне лично кажется очень странным, что так много людей задают последний вопрос. Мне почему-то всегда казалось, что это такая простая вещь, которую умеют вообще все. Но, раз так много людей интересуются, здесь я постараюсь дать достаточно развернутый и в то же время краткий ответ.

Я предполагаю, что SQL вы знаете. То есть, объяснять, что такое таблицы, строки, индексы, первичные ключи и ссылочная целостность, не требуется. Если это не так, боюсь, я вынужден отправить вас к соответствующей литературе. Благо, ее сейчас очень много.

Рисуем диаграмму

Допустим, требуется спроектировать схему базы данных, в которой хранится информация о музыкальных исполнителях, альбомах и песнях. На начальном этапе, когда у нас еще совсем ничего нет, удобно начать с рисования диаграммы будущей схемы. Можно начать с наброска ручкой на листе бумаги, можно сразу взять специализированный редактор. Их сейчас очень много , все они устроены довольно похожим образом. При подготовке этой заметки я воспользовался DbSchema . Это платная программа, но мне кажется, что она стоит своих денег. К тому же, в нормальных компаниях обычно оплачивают стоимость софта, необходимого для работы. Триал у DbSchema, если что, составляет две недели.

Нарисовать следюущую диаграмму заняло у меня порядко десяти минут:

Если раньше вам не доводилось работать с такими диаграммами, не пугайтесь, тут все просто. Прямоугольнички — это таблицы, строки в прямоугольничках — имена столбцов, стрелочками обозначаются внешние ключи, а ключиками — первичные ключи. При желании тут можно разглядеть даже индексы, типы столбцов и обязательность их заполнения (null / not null), но для нас сейчас это не так важно.

Генерируем SQL и скармливаем его СУБД

Нетрудно заметить, что данная диаграмма легко отображается в код для создания схемы базы данных на языке SQL. В DbSchema сгенерировать SQL можно, сказав Schema → Generate Schema and Data Script. Затем полученный скрипт можно скормить используемой вами СУБД:

cat music.sql | psql -hlocalhost test_database test_user

Я использовал PostgreSQL. Информацию о том, как установить эту СУБД, вы найдете в этой заметке .

Итак, чем же я руководствовался при проектировании схемы?

Нормальные формы

Процесс устранения избыточности и ликвидации противоречивости базы данных называется нормализацией . Выделяют так называемые нормальные формы, из которых на практике редко кто помнит больше первых трех.

Грубо говоря, таблица находится в первой нормальной форме (1НФ), если на пересечении любой строки и любого столбца в таблице находится ровно одно значение. В современных РСУБД это условие всегда выполняется. Даже если СУБД поддерживает множества или массивы, на пересечении строки и столбца хранится ровно одно значение типа множество или массив. Но в таблице (user varchar(100), phone integer) не может быть строки alex - 1234, 5678 . В 1НФ может быть только две сроки — alex - 1234 и alex - 5678 .

Вторая нормальная форма (2НФ) означает, что таблица находится в первой нормальной форме, и каждый неключевой атрибут неприводимо зависит от значения первичного ключа. Неприводимость означает следующее. Если первичный ключ состоит из одного атрибута, то любая функциональная зависимость от него неприводима. Если первичный ключ является составным, то в таблице не может быть атрибута, значение которого однозначно определяется значением подмножества атрибутов первичного ключа.

Таблица находится в третьей нормальной форме, если она находится в 2НФ и ни один неключевой атрибут не находится в транзитивной функциональной зависимости от первичного ключа. Например, рассмотрим таблицу (employee varchar(100) primary key, department varchar(100), department_phone integer) . Очевидно, что она находится в 2НФ. Но телефон отдела находится в транзитивной функциональной зависимости от имени сотрудника, так как сотрудник однозначно задает отдел, а отдел однозначно задает телефон отдела. Для приведения таблицы в 3НФ нужно разбить ее на две таблицы — employee - department и departmnet - phone .

Легко видеть, что нормализация уменьшает избыточность базы данных и препятствует внесению случайных ошибок. Например, если оставить таблицу из последнего примера в 2НФ, то можно по ошибке прописать одному и тому же отделу разные телефоны. Или рассмотрим компанию с пятью отделами и 1000 сотрудниками. Если у отдела поменялся номер телефона, то для его обновления в базе данных в случае 2НФ потребуется просканировать 1000 строк, а в случае с 3НФ только пять.

Таблицы в программе Access 2007 представляют связанную систему. Объединение позволяет вести обработку данных из нескольких таблиц. Для обработки формируются запросы – таблицы, в которых сведения из одной или нескольких таблиц сгруппированы нужным образом, иногда с производством необходимых вычислений. Запросы мы рассмотрим в последующих главах, а здесь поговорим о связях между таблицами.

Схема данных задаёт структуру базы данных. В ней представляются и запоминаются связи между таблицами. Эти связи используются при конструировании запросов и отчётов на основе нескольких таблиц. Схема данных отображает связи графически. Таблицы на схеме представлены в виде прямоугольников со списками полей. Если полей слишком много и они не помещаются в прямоугольник, то автоматически с правой стороны прямоугольника образуется полоса прокрутки , с помощью которой можно просмотреть весь список. Схема данных , используемая в нашей работе, представлена на рис. 6.10.

Рис. 2.11 Виды связей между таблицами: а) один-к-одному, б) один-ко-многим и в) многие-ко-многим

Связи в Access 2007 встречаются трёх видов: а) один-к-одному, б) один-ко-многим и в) многие-ко-многим, как это показано на рис. 2.11. Первый вид связи показывает, что одной записи в Таблице1 соответствует одна же запись в Таблице2 . Такой способ связи применяют, например, для двух таблиц, сделанных из одной, чтобы таблицы не были слишком громоздкими. Тогда Таблица2 – просто продолжение Таблицы1 . Чаще других встречаются связи один-ко-многим. Например, на одной кафедре работает много преподавателей. Поэтому между таблицами Кафедры и Преподаватели устанавливается именно такая связь.

Рис. 2.12 Вкладка Работа с базами данных

Связь типа многие-ко-многим в программе Access 2007 прямо не осуществляется. Чтобы создать такую связь, надо вставить промежуточную таблицу. Например, в нашей базе данных (рис. 6.10) предусмотрена промежуточная таблица Заказано , поскольку между таблицами Клиенты и Товары существует связь многие-ко-многим . Таблица Заказано позволяет избежать такой связи, которая в Access 2007 напрямую не осуществима.

Техника установления связи между таблицами включает в себя три действия: 1) вызов Схемы данных – окна, в котором и будет изображена схема, 2) добавление в окно схемы тех таблиц, между которыми надо установить связи и 3) протягивание связей между таблицами с приданием им необходимых свойств. Рассмотрим эти действия подробно.

Рис. 2.13 Диалоговое окно Добавление таблицы

Схему данных можно вызвать, когда нужные таблицы уже созданы. Для её вызова надо щёлкнуть по кнопке Схема данных на ленте вкладки Работа с базами данных (рис. 2.12). Появится окно Схема данных , пока пустое, и диалоговое окно Добавление таблицы , которое видно на рис. 2.13. С помощью окна Добавление таблицы в окно Схема данных помещают необходимые таблицы.

Рис. 2.14 Контекстное меню, вызванное правой кнопкой мыши, внутри окна Схема данных

Если по каким-то причинам окно Добавление таблицы не появилось, то надо щёлкнуть правой кнопкой в любом месте окна Схема данных . Появится контекстное меню (рис. 2.14). В нём надо щёлкнуть по надписи Добавить таблицу . Появится диалоговое окно Добавление таблицы , которое видно на рис. 2.13.

С появлением диалогового окна Добавление таблицы можно перенести внутрь окна Схема данных нужные таблицы. Мы ограничимся двумя таблицами: Кафедры и Преподаватели . Названия этих таблиц надо выделить, как показано на рис. 2.13, а потом сразу же щёлкнуть по кнопке Добавить . Точно так же поступают и с другими таблицами, которые надо поместить в Схему данных . Окно Добавление таблицы после добавления нужных таблиц следует закрыть. В нашем примере прямоугольники, обозначающие обе нужные нам таблицы, появятся в Схеме данных , как это видно на рис. 2.15.

Обозначения таблиц внутри окна Схема данных содержат список всех полей данной таблицы, причём слева от имени ключевого поля (или ключевых, если их несколько) расположен значок ключ. Обозначения таблиц можно передвигать мышью, ухватив за заголовок таблицы. Можно изменять и размеры прямоугольников, обозначающих таблицы. Для этого надо подвести указатель мыши к одной из границ прямоугольника. Появится двунаправленная стрелка: . Захватив такую стрелку мышью, можно передвинуть границу прямоугольника в любое место, тем самым, изменив его размер.

Рис. 2.15 Законченная Схема данных со связью между таблицами

Когда прямоугольники обозначений таблиц размещены внутри окна Схемы данных , можно приступить к установлению связей между таблицами. Связывают одноимённые поля. В одной из таблиц используют для связи обычно ключевое поле. Та таблица, у которой поле связи ключевое, считается главной. С её стороны связь обозначена 1 . Со стороны связаной таблицы связь обозначена ¥ . Так устанавливается связь Один-ко-многим .

Рис. 2.16 Диалоговое окно Изменение связей

Техника соединения таблиц связями проста: надо щёлкнуть соединяемое поле главной таблицы. Оно выделится. Не отпуская кнопку мыши, надо вести линию к одноимённому полю вспомогательной таблицы. Соединения сначала не произойдёт, а возникнет диалоговое окно Изменение связей (рис. 2.16). Окно помогает утвердить характер связи и настроить целостность данных обеих таблиц. В окне надо убедиться, что связь произошла по одноимённым полям, а затем щёлкнуть по окошечку надписи . В окошечке появится флажок: ü. После этого надо такие же флажки выставить ещё в двух окошечках, находящихся ниже. Таким образом, задаются свойства связи. Свойство Обеспечение целостности данных означает, что удалять данные из ключевого поля главной таблицы нельзя. А свойства Каскадное обновление связанных полей и Каскадной удаление связанных записей – соответственно, что операции редактирования и удаления данных в ключевом поле главной таблицы разрешены, но сопровождаются автоматическим изменениями в связанной таблице. Завершается создание связи щелчком по кнопке [Создать] . Нужная связь появится (рис. 2.15).

Стоит заметить, что в случае, если невозможно осуществить связь с обеспечением целостности данных, например, если проведена связь между полями с различной информацией, появляется окно, изображенное на рис. 2.17.

Рис. 2.17 Окно с предупреждением о невозможности создания связи


Схема данных

При создании реляционной БД в СУБД Access создается схема данных , которая позволяет наглядно отобразить логическую структуру БД: показывает таблицы и связи между ними, к тому же обеспечивает использование установленных в базе связей при выполнении обработки данных.

В схеме данных нормализованной БД, которая основана на отношениях «один-к-одному» и «один-ко-многим» между таблицами, для связей этих таблиц по уникальному индексу главной таблицы или первичному ключу могут быть установлены параметры обеспечения связной целостности .

В процессе поддержания целостности взаимосвязанных данных наличие записи в подчиненной таблице не допускается, если связанная с главной таблицей запись в ней отсутствует. Соответственно, в случае первоначальной загрузки базы данных, при удалении, добавлении и корректировке записей системой допускается выполнение операции лишь в том случае, когда она не нарушает целостность.

Связи, которые определены в схеме данных, используются автоматически для объединения таблиц в процессе разработки многотабличных отчетов, запросов, форм, что существенно упрощает процесс их конструирования.

Связи в схеме данных могут быть установлены для любой пары таблиц с одинаковым полем, которое позволяет объединять данные таблицы.

Схемы данных отображаются в области навигации в окне БД лишь в проектах Access, которые работают с базами данных сервера. Чтобы отобразить схему данных в БД Access используют команду Схема данных , размещенную в группе Отношения на вкладке Работа с базами данных .

Пример 1

Рассмотрим модель данных предметной области «Поставка товаров» (рисунок 1). Схема данных Access, построенная для данной модели данных, представлена на рисунке 2.

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

Особенности схемы данных

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

С помощью связей между таблицами выполняется объединение данных разных таблиц, которое необходимо для решения многих задач введения, корректировки и просмотра данных, получения сведений по запросам и выведения отчетов. Связи таблиц устанавливаются соответственно проекту логической структуры рассматриваемой базы данных (рисунок 2) и отображаются на схеме данных Access.

Схема данных, кроме выполнения роли средства графического отображения логической структуры базы данных, активно используется в процессе обработки данных. С помощью связей, которые установлены в схеме данных, разработчик освобождается от необходимости каждый раз сообщать системе о наличии какой-либо связи. Один раз указав связи в схеме данных, они будут автоматически использоваться системой. Создание схемы данных предоставляет возможность упростить конструирование многотабличных отчетов, запросов, форм, а также обеспечивает поддержание целостности взаимосвязанных данных при корректировке и внесении данных в таблицы.