
- •Теория субд
- •За таблицами – наше будущее!
- •Связываем данные
- •Объектный рай
- •Сетевая база данных
- •Клиент-сервер
- •Особенности клиент-сервера
- •Индексы на сервере
- •Третий уровень
- •Сетевые субд
- •Архитектуры субд: технология локальных (настольных) бд
- •Архитектуры субд: технология "клиент-сервер"
- •В чем сходства и различия?
- •Выбираем бд
- •Кибернетическое будущее за базами знаний
- •Искусственный интеллект
- •Данные и знания
- •Базы знаний и экспертные системы
- •Машинное обучение
- •Анализ данных и olap-технологии
- •Индукция правил и деревья решений
- •Хранилища данных и корпоративная память
- •Машинное обучение – ключ к кибернетическому бессмертию
- •Кофе. Солнце. Базы данных
- •Не microsoft'ом единым. Bde
- •Odbc на практике
- •Форточки и odbc
- •Odbc для пингвина
- •Какие они бывают?
- •Что такое правильная база данных?
- •Нужна наглядная схема!
- •А как это сделать?
Связываем данные
Чтобы добиться эффективного управления базой, необходимо обеспечить связанность данных. Проще говоря, нужно уметь связывать две или более таблицы в БД (если они, конечно, там есть). Для этого был придуман так называемый "внешний ключ", который представляет собой атрибут (или набор атрибутов) в одной таблице, совпадающий по типу с первичным ключом другой. Но также следует соблюдать условие, согласно которому каждое значение в столбце одной таблицы должно совпадать с каким-либо значением в другой. Суть этого определения лови после моего разъяснения о возможных связях данных.
В теории СУБД выделяется три вида связей: один-к-одному, один-ко-мно-гим и многие-ко-многим. Расскажу подробно о каждом виде.
1. Один-к-одному. Этот вид связи применяется в том случае, когда первичный ключ одной таблицы ссылается на ключ другой. Чтобы было понятнее, приведу пример: допустим, у нас имеется три таблицы хакерской БД. Первая – информация о хакере: дата рождения, пол (девушки тоже бывают взломщиками ;)) и ICQ. Вторая – хакер-ские течения (тип течения, его сложность и начальные капиталовложения). Ну и третья – тип выхода в интернет (технология, скорость доступа, оценка безопасности). Все эти таблицы нельзя свести в одну, так как в результате отсутствия связи между данными о доступе в интернет и о хакерс-ких течениях (и не только о них) мы получим путаницу. А при реализации связи в виде трех разных таблиц (с помощью первичного ключа - порядкового номера) обеспечивается и высокая скорость обработки, и упорядоченность данных.
2. Один- ко- многим. Наиболее типичная связь. Реализуется при копировании первичного ключа одной таблицы в другую. В этом случае во второй таблице этот ключик называется уже внешним. Непонятно? Тогда опять обращусь к примеру. Возьмем две таблицы – с информацией о хакере (таблица "Хакеры") и об отношениях с характеристиками эксплойтов, которые он написал (таблица "Эксплойты"). По сути, они связаны механизмом один-ко-многим. Действительно, каждый хакер может быть авто-
ром нескольких эксплойтов (так часто и бывает), но каждый эксплойт может быть написан одним и только одним автором (даже при совместной работе в хак-группах определенным эксплойтом занимается один человек). Здесь в качестве внешнего ключа в таблице "Эксплойты" используется ник хакера, а в качестве первичного – название эксплойта. При этом внешний ключ "ник хакера" является первичным ключиком в таблице "Хакеры", а сюда введен намеренно для связи двух таблиц и организации поиска нужной информации. Кстати, отношение "Эксплойты" совсем не обязательно будет состоять лишь из одного атрибута – можно добавить характеристики операционок, к которым применим эксплойт, количество целей, тип (локальный или удаленный) и т.п.
3. Многие-ко-многим. Суть этого типа связи в том, что ключ в одной таблице связывается с ключом другой и наоборот. С этим типом в реляционной модели дела обстоят очень плохо. Точнее, эту связь напрямую вообще никак не реализовать. Чтобы обойти этот недостаток, используется классическое решение: добавляется промежуточное отношение, которое будет связано типом "один-ко-многим" как с первой, так и со второй таблицей. Опять наглядный пример. Имеем два отношения: информация о хакерах и данные о серверах, которые когда-то были взломаны. Если подумать, то мы владеем следующей структурой: одним злоумышленником могут быть хакнуты несколько серверов (так часто и бывает в жизни), а на один сер-вак могут поселиться несколько хакеров (одновременно или последовательно), если админ вовремя не про-патчил баг. Чтобы реализовать подобную схему в реляционной БД, мы добавим промежуточное отношение из двух полей: ник хакера и адрес сервера. Таким образом, эта вспомогательная таблица будет иметь связь "один-ко-многим" как с первым, так и со вторым отношением. Конечно, в этом случае повысится избыточность данных, поэтому эксперты рекомендуют избегать таких связей.
Вот, собственно, и вся информация о реляционной модели. Чтобы подытожить этот раздел, скажу, что многие СУБД построены именно на ее основе. Я бы с удовольствием рассказал про булеву алгебру, на законах которой основана реляционная модель, но, к сожалению, объемы этой статьи не позволят мне этого сделать.