Лайфхаки в аудите

О сложном по-простому. Базы данных (часть 1)

Время прочтения: 6 мин.

Наша страна, Россия – это одна из Баз данных (БД), которые имеются на сервере Terra. Назовем ее БД Russia. Города и другие населенные пункты России – это схемы в БД. Пусть наша столица представляет самую большую схему в нашей БД Russia – назовем ее Moscow. Множество домов с людьми – это таблицы с данными. Дома бывают частные (на одну семью), а бывают многоэтажные или многоквартирные дома. Частные дома – пусть будут обычными таблицами, а многоквартирные дома – это партицированные таблицы. Этаж в доме – это партиция таблицы. Квартиры на этаже – это строки в таблице, а люди, живущие в квартирах – это данные в таблицах. И человек, который живет (допустим) на 3-м этаже и имеет прописку по заданному адресу, не может быть зарегистрирован на других этажах. Он будет жить на третьем этаже. Таким образом, мы можем секционировать людей по этажам. А в БД в партицированных таблицах возможностей секционированности данных еще больше! Данные в партицированной таблице можно секционировать по определенному признаку, например, по году рождения (т.е. на каждом этаже будут собираться люди определенного года), по половой принадлежности, по возрастному диапазону и т.д. В жизни, конечно, такое маловероятно, но в БД такое распределение данных можно организовать. Особенно удобно это делать на больших таблицах.

Далее, у людей есть семейные и родственные связи. Родственники могут жить в других домах (таблицах) – такие связи называются отношения таблиц, или связи таблиц. Связи могут быть явными, и неявными. При явных связях создаются ключи. Это можно сравнить с тем, когда у человека есть брат/сестра или он состоит в браке, и это отмечено в государственных реестрах. Т.е. страна — Россия знает об этих родственных связях. Когда создается Foreign Key (внешний ключ) – ссылка на другую таблицу, БД Russia знает о связи двух и более указанных таблиц.

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

Мужчина так или иначе имеет какое-то отношение к женщине и ее родственникам, но государство (БД Russia) об этом ничего не знает. Иначе говоря, в БД Russia не создаются внешние ключи, но неявная связь по данным в таблицах существует.

При создании Foreign Key, требуется, чтобы в таблице, на которую ссылается ключ, был создан на ключевое поле (или несколько полей) – Primary Key (первичный ключ), который указывает БД, что значение указанного поля строки уникальное.

Проще говоря, первичный ключ служит для идентификации строк. В жизни первичные ключи встречаются вокруг нас везде. Например, счет, выставленный за коммунальные услуги, является уникальным; номер городского телефона, по которому можно дозвониться до привязанного к нему адреса, тоже уникален и т.д. Ключи также, как и связи, могут быть по нескольким полям. Называются такие ключи составными. Например, когда приходит посылка от родственников по некоему адресу: 1. индекс, 2. область, 3. Населенный пункт, 4. улица, 5. дом, 6. квартира. Здесь все шесть полей определяют уникальность квартиры, в которой проживают получатели этой посылки.

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

Теперь рассмотрим на примерах типы связей (отношений) таблиц. Существует несколько типов:

  • Отношение «Один-к-одному»
  • Отношение «Один-ко-многим» и «Многие-ко-одному»
  • Отношение «Многие-ко-многим»
  • «Самостоятельные ссылки»

Связь «один-ко-одному» не очень распространены в БД. Такого рода отношение можно соотнести как, если у человека есть один паспорт РФ, и паспорт РФ с определенным номером, в свою очередь, может принадлежать только одному человеку.

Другой пример связи «один-ко-многим» – это связь, которая существует между матерью и ее детьми. Мать может иметь несколько детей, но каждый ребенок может иметь только одну мать.

Связь «многие-ко-многим» – это связь, при которой множественным записям из одной таблицы могут соответствовать множественные записи из другой таблицы.

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

И последнее отношение, которое мы рассмотрим – это «самостоятельные ссылки». Такая связь используется, когда таблица, должна иметь отношение сама с собой. Представим, что в одном доме в квартире № 1 живут пожилые родители. В квартире № 2 живет их сын со своей женой, а в квартире № 3 живет дочь со своим мужем и детьми, родители которого живут в квартире № 2. Тут видно связь от потомков к их родителям.

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

Индекс можно сопоставить с неким реестром упорядоченных данных. Представьте себе, что вы библиотекарь огромной городской библиотеки. К вам приходит девушка и просит найти ей книгу «Гарри Поттер». Но среди миллионов книг вы понятия не имеете, где ее искать. Тогда придется искать книгу, просматривая каждую полку каждого стеллажа, и на поиск уйдет много времени. Но, если завести реестр, упорядочить все книги по алфавиту и указать, в каком стеллаже и на какой полке находится та, или иная книга, то поиск нужной книги займет значительно меньше времени. Таким образом, индекс помогает оптимизировать запрос, ускорить его производительность, сократить время на поиск и выдачу данных. Определяются поля для построения индекса, по полям в запросе, используемых в выборке данных и сортировке. Индексы строятся на таблицах как по одному полю.

так и по нескольким полям (называется составным индексом)

И в завершении рассмотрим, что такое линки на другие БД. Представьте, что ваши родственники живут в другой стране (БД). Вы хотите встретиться со своими родственниками и первое, что вы для этого сделаете – загранпаспорт и визу. С загранпаспортом и визой вы сможете въехать заграницу. Также в БД существует такое понятие, как создать DB link или linked server (т.е. создать связь с другой БД), и тогда вы сможете связать таблицы из одной БД с таблицами другой БД, и получить выборочные данные со всех соединенных таблиц. Даже если базы данных находятся на разных серверах.

Продолжение следует…

Советуем почитать