Теория и практика построения баз данных (1088289), страница 11
Текст из файла (страница 11)
Например, если у руководителя по фамилии Паркс изменится номер телефона, необходимо будет изменить три строки данных. По этой причине было бы лучше представить данные в виде двух отношений. Первое из них, 82 (ИияСтудента, ТелефонСтудента, Ииярукоаодителя), будет содержать имя и телефон студента и фамилию его руководителя: 54 Глава 2. Введение в разработку баз данных База данных 55 ТлфСтудента ИмяСтуденте Имярукоеод 232-4487 232-4444 232-5588 Джонс Паркс Джонс Аконсон, Бег Скотт, Гленн Зилог,фрита Второе отношение, КЗ 1ИияРукоеодителя, ТелефонРуководителя), будет содержать фамилию и телефон руководителя; ТлфРукояод Имярукояод 236-0098 236-0110 Перкс Джонс Теперь, если у руководителя изменится номер телефона, необходимо будет изменить только одну строку в отношении КЗ.
Разумеется, чтобы сформировать отчет, в котором были бы представлены имена студентов вместе с именами их руководителей, нужно будет объединить строки этих двух таблиц. Оказывается, однако, что гораздо лучше хранить отношения раздельно и объединять нх при составлении отчета, чем хранить их в виде одной комбинированной таблицы. Метаданные Таблица 2.1. Примеры метаданных Таблица ЬуеТаЫее Имя таблицы Число столбцов Первичный ключ НомерСтудента ИмяРукоеодителя НомерДисциллины сНомерСтудента, НомерДисциллины) Студент Руководитель Дисциплина УчебныйПлан Как было указано в главе 1, база данных является самодокументированной, то есть одной из ее составляющих является описание собственной структуры.
Это описание называется метаданными (спесадаса). так как СУБД предназначены для хранения таблиц и манипуляции имп, болыпннство из них хранят метаданные в форме таблиц, цногда называемых сисгнелсгсыми таблицами (зузсеш саЫез). В табл. 2.1 представлены два примера хранения метаданных в системных таблицах. В таблице 5узТаЫез перечислены все таблицы, имеющиеся в базе данных, и для каждой таблицы указаны количество столбцов сс имена одного илн нескольких столбцов, служащих первичным ключом. Такой столбец или набор столбцов является уникальным идентификатором строки. В табляце 5узСосцшпе перечислены столбцы, имеющиеся в каждой таблице, а также тип данных и ширина каждого столбца.
Эти две таблицы представляют собой типичные образцы системных таблиц; в других подобных таблицах хранятся списки индексов, ключей, хранимых процедур и т. п. Таблица буеСосцглпя Имя столбца Длина' Имя таблицы Тил данных со!едет Техс Тех! Техт Техс Техт НомерСтудента Имя техс соседе г ТехС Оескла! Количестеочасое НомерСтудента НомерДисциллины Курс слСедег Сл1едег Техс УчебныйПлан УчебныйПлан Хранение метаданных в таблицах не только эффективно для СУБД, но и удобно для разработчиков, поскольку для запроса метаданных онп могут использовать те же самые средства, что и для запроса пользовательских данных.
В главе 9 мы обсудим язык под названием 5О1, который используется для запроса и обковления таблиц метаданных и пользовательских данных. В качестве возможного примера использования 5Я1. представьте, что вы разработали базу данных с 15 таблицами н 200 столбцами. Вы помните, что некоторые столбцы имеют тип данных сцггепсу, ко нс можете вспомнить, какие именно, С помощью 5Я1. можно обратиться к таблице 5узС01иглпз и по ней определить, какие столбцы имеют указанный тип данных.
Индексы Третий тип данных, которые хранятся в базе данных, призван улучшить ее производительность и доступность. Эти данные, называемые иногда избсссточгсьглси данными (оуегЬеаг) г)ага), состоят главным образом из индексов (1пс)ехез), хотя в ряде случаев используются и другие структуры данных, такие как связанные списки (индексьс и связанные списки обсуждаются в приложении Л). В табл. 2.2 приведены данные о студентах и два индекса к ней. Чтобы уяснить, какая может быть польза от индексов, представьте себе, что данные в таблице СТУДСНТ расположены в порядке возрастания значения поля НомерСтудента, а пользователь хотел бы создать из этих данных отчет, отсортированный по полю Фаиилия.
Для этого можно было бы извлечь все данные из таблицы н отсортировать, но, если размеры таблицы не слишком малы, этот процесс может занять много времени. В качестве альтернативы можно создать индекс Фамилия, приведенкый в табл. 2.2. Записи в этом индексе отсортированы по полю Фаиилия, ' Длины приведены в байтах или, что то же самой в символах (лля текстовых данных).
фамилия Специальность Имяруководителя Телефон Кафедра НомерДисциллины Назеание Студент Студент Студент Студент Руководитель Руководитель Руководитель Дисциплина Дисциплина Дисциплина УчебныйПлан 4 20 30 1О 25 12 15 4 10 4 4 2 СУБД 57 Таблица 2.2. Примеры индексов Таблица СТУДЕНТ НомарСтуданта Имя Фамилия Специальность Бухгалтерский учет Информационные системы Бухгалтерский учет Маркетинг Бухгалтерский учет Информационные системы Бухгалтерский учет Бейкер Абернатн Джексон Джонсон Тафт Сматарс Джонсе Джеймс Мэри Бет Элдридж Крис Джон Майкл 100 200 ЗОО 400 500 500 700 Индекс Фамилия Фамилия Номаротуданта Абернатн Бейкер Джонсон Джонсон Сматерс Тафт 200 1ОО 300 400, 700 боо 500 СУБД Индекс Специальность Специальность НомарСтудента Бухгалтерский учет Информационные системы Маркетинг 100, ЗОО, 500, 700 200, боо 400 56 Глава 2.
Введение а разработку баз данных поэтому достаточно считать записи из индекса в порядке следования, чтобы за- тем получать данные из таблицы СТУДЕНТ, отсортированные в нужном порядке. Теперь представьте, что требуется получить данные о студентах, отсортированные по полю Специальность. Опять-таки, можно извлечь эти данные пз таблицы СТУДЕНТ и отсортировать, а можно создать индекс Специальность и использовать его, как показано выше. Индексы используются не только для сортировки, но и для быстрого доступа к данным. Пусть, например, пользователю нужны сведения только о тех студентах, чьей специальностью являются информационные системы.
Без индекса пришлось бы проводить поиск по всей таблице. Имея же индекс, можно найти в нем соответствующую запись и использовать ее для нахождения нужных строк в таблице. На самом деле, если количество строк невелико, как в таблице СТУДЕНТ, индексы не нужны, но представьте себе таблицу, которая содержит 10 000 или 20 000 строк.
В этом случае сортировка или поиск цо всей таблице работали бы слишком медленно. Индексы удобны для сортировки и поиска, но за их использование приходится платить свою цену. Каждый раз, когда обновляется строка в таблице СТУДЕНТ, индексы также необходимо обновлять. Это не обязательно плохо — это означает только, что индексы не даются даром и поэтому должны использоваться только в тех случаях, когда это действительно оправдано. Метаданные приложений Четвертый и последний тип информации в базе данных — это лгвтадапиыв приложений (арр!)сабоп шетат)ага), которые описывают структуру и формат пользовательских форм, отчетов, запросов и других компонентов приложений, Не все СУБД поддерживают компоненты приложений, а из тех СУБД, где такая возможность предусмотрена, не все хранят структуру этих компонентов в виде метаданных приложений в базе данных.
Однако большинство современных СУБД хранят эту информацию в базе данных. Вообще говоря, ни разработчики баз данных, ни пользователи не обращаются к метаданным приложений напрямую, а пользуются соответствующими средствами, которые предоставляет СУБД. СУБД значительно различаются по своим характеристикам и функциям.
Первые продукты такого рода были разработаны для больших ЭВМ в конце 1960-х годов и были весьма примитивны. С тех пор СУБД постоянно совершенствовались, а функции их расширялись. Усовершенствования касались не только обработки баз данных: СУБД также снабжались функциями, упрощающими создание приложений баз данных. В этой главе для иллюстрации возможностей СУБД мы будем использовать М1сгозо1с Ассевв 2002.
Это обусловлено тем, что Асеева 2002 обладает всеми типичными характеристиками и функциями соврелтенной СУБД. Однако Ассезз 2002 не является единственной СУБД такого рода, и наш выбор ни в коей мере не предполагает какого-либо предпочтения перед другими подобными продуктами, например Т.огиз Арргоас)т Как видно из рис. 2.1, характеристики и функции СУБД можно разделить на три подсистемы: подсистему средств проектирования, подсистему средств обработки и ядро СУБД. Подсистема средств проектирования Подсиствна средств проектирования (т1ез1йп тоо15 вцЬзузьеш) представляет собой набор инструментов, упрощающих проектирование и реализацию баз данных н их приложений.
Как правило, этот набор включает в себя средства для создания таблиц, форм, запросов и отчетов, В СУБД имеются также языки программирования и интерфейсы для них. Например, в Ассезз есть два языка: макроязык, не требующий глубокого знания программирования, и версия языка ВАБ1С под названием У1зца1 Ваз)с. 88 Глава 2. Введение в разработку баз данных Создание базы данных 89 Подсистема обработки Подсистема обработки (гпп-сппе зпЬзузсегп)! занимается обработкой компонентов приложения, созданных с помощью средств проектирования.
Например, в Ассезэ 2002 имеется компонент. материализующий формы и связывающий элементы форм с данными таблиц. Представьте себе форму с текстовым полем, где отображается значение столбца НонерСгуденга из таблицы СТУДЕНТ. В процессе работы приложения при открытии формы процессор форм ((огпг ргосеьвог) извлекает значение поля НояерСтудента из текугцей строки таблицы и отображает его в форме. Все это делается автоматически — ни пользователю, ни разработчику не требуется ничего делать, если имеется готовая форма.