понятие база данных в информатике
Содержание статьи:
Что такое база данных в информатике
В информатике, понятие база данных — это набор данных для информационных сетей и пользователей, хранящихся в особом, организованном виде. Вид хранения данных определяется заданной структурой (схемой) базы данных и правилами ее управления.
Сами по себе, базы данных бесполезны, если нет возможности ими управлять. Под управлением базой данных понимаем возможность индивидуального или коллективного добавления информации, ее сортировку, частичное или полное копирование и перемещение, объединение двух или нескольких баз данных. Для управления базами данных созданы программные продукты, являющиеся программным обеспечением баз данных. Называются они СУБД – системы управления базами данных.
Что такое СУБД и SQL
Именно с СУБД имеют дело потребители, то есть мы с вами. Современные СУБД позволяют обрабатывать не только тексты или графику, но и медиафайлы (аудио и видео файлы).
Любой программный продукт имеет свой язык, при помощи которого он управляется. Не исключение и СУБД. Один из основных языков для общения с СУБД является язык SQL (structured query language — язык структурированных запросов).
Стоит отметить, что по характеру использования СУБД делятся на однопользовательские (для одного пользователя – локального компьютера) и много пользовательские (для сетей).
Я уверен вы не думаете, что существует одна универсальная СУБД. И правильно, их десятки. В рамках этого раздела мы ограничим себя работой с бесплатной и самой распространенной СУБД MySQL.
СУБД MySQL
СУБД MySQL работает только с реляционными базами данных. Реляционные базы данных наиболее просты для первичного изучения. Кроме этого они используются на всех хостингах и серверах для массового пользования.
Осталось дать понятие реляционная база данных. Это простые таблицы, в которых есть информационные строки и столбцы. Пересечение строки и столбца называют ячейкой. Вся база данных состоит из нескольких или многих таблиц, причем, все таблицы между собой взаимодействуют.
©WebOnTo.ru
Статьи по теме «База данных»
Поделиться ссылкой:
Похожие статьи
Geometry of Flowers by Mookiezoolook
Для приложений, которые будут масштабироваться по трафику и сложности, крайне важно изначально спроектировать грамотную схему базы данных. Если сделать плохой выбор, придется потратить много усилий, чтобы этот плохой шаблон не распространился на службы и контроллеры бэкендов и, наконец, на фронтенд.
Но как оценить, какая схема лучше? И что вообще значит «лучше», когда мы говорим об архитектуре БД? Команда Mail.ru Cloud Solutions предлагает познакомиться с рекомендациями Майка Алча, консультанта по разработке программного обеспечения. Нам кажется, что он довольно лаконично резюмировал некоторые принципы грамотной архитектуры.
Директор: «Думаю, мы должны построить базу данных SQL».
Разработчик (он вообще понимает, о чем говорит, или просто увидел какую-то рекламу в бизнес-журнале?..): «Какого цвета хотите базу данных?».
Директор: «Пожалуй, у сиреневого больше всего памяти».
Несколько базовых советов
Итак, важно стремиться к двум основным вещам:
- При разбиении информации по таблицам сохраняется вся информация.
- Избыточность хранения минимальна.
Что касается второго момента: хотим ли мы уменьшить избыточность только из-за проблемы с размером хранилища? Нет, мы делаем это главным образом потому, что наличие избыточных данных приводит к проблемам несогласованности, если во время обновления вы не обновляете все поля, представляющие одну и ту же информацию. Вот некоторые рекомендации, которые помогут приблизиться к хорошей архитектуре:
- Используйте как минимум третью нормальную форму (в которой каждый неключевой атрибут «должен предоставлять информацию о ключе, полном ключе и ни о чем, кроме ключа», согласно формулировке Билла Кента).
- Создайте последнюю линию обороны в виде ограничений.
- Никогда не храните в одном поле целые адреса.
- Никогда не храните в одном поле имя и фамилию.
- Установите соглашения для имен таблиц и полей и придерживайтесь их.
— Над чем работаешь?
— Оптимизирую этот SQL-запрос. Он тормозит, и пользователи начинают жаловаться.
— А нецензурная лексика в комментариях обязательна для оптимизации?
— Если бы ты видел оригинальный код, то не спрашивал бы.
Рассмотрим эти рекомендации подробнее.
1. Используйте как минимум третью нормальную форму
Архитектуру баз данных можно разделить на следующие категории:
- Первая нормальная форма.
- Вторая нормальная форма.
- Третья нормальная форма.
- Нормальная форма Бойса-Кодда.
Эти категории представляют классификацию по качеству. Вкратце рассмотрим все категории и разберем, почему нужна хотя бы третья нормальная форма.
Первая нормальная форма
Для первой нормальной формы каждое значение каждого столбца каждой таблицы в БД должно быть атомарным. Что значит атомарным? Если вкратце, атомарное значение представляет собой «единичную вещь».
Например, у нас есть такая таблица:
Здесь столбец areas («Области») содержит значения, которые не являются атомарными. Например, в строке Джона Доу поле хранит две сущности: «Дизайн веб-сайтов» и «Исследование клиентуры».
Таким образом, эта таблица не находится в первой нормальной форме.
Чтобы привести ее к такой форме, в каждом поле должно храниться только одно значение.
Вторая нормальная форма
Во второй нормальной форме ни один столбец, который не является частью первичного ключа (или который может действовать как часть другого первичного ключа), не может быть выведен из меньшей части первичного ключа.
Что это значит?
Допустим, у вас такая архитектура базы (я подчеркнул поля, соответствующие первичному ключу в этой таблице):
В этом проекте имя сотрудника может быть непосредственно выведено из employeee_id, поскольку идея заключается в том, что имя сотрудника однозначно определяется его идентификатором.
Аналогично, имя проекта однозначно определяется идентификатором project_id.
Таким образом, у нас два столбца можно вывести из части первичного ключа.
Каждого из этих примеров было бы достаточно, чтобы выбросить эту таблицу из второй нормальной формы.
Еще один вывод заключается в том, что если таблица была в первой нормальной форме и все первичные ключи являются одиночными столбцами, то таблица уже находится во второй нормальной форме.
Третья нормальная форма
Чтобы таблица соответствовала третьей нормальной форме, она должна быть во второй нормальной форме, при этом в ней не должно быть атрибутов (столбцов), кроме первичного, которые транзитивно зависят от первичного ключа.
Что это значит?
Допустим, у вас следующая архитектура (которая далека от идеала):
В этой таблице department_number можно вывести из employee_id, а department_name можно вывести из department_number. Таким образом, department_name транзитивно зависит от employee_id!
Если существует такая транзитивная зависимость: employee_id → department_number → department_name, то данная таблица не находится в третьей нормальной форме.
Какие проблемы возникают из-за этого?
Если название отдела можно вывести из его номера, то хранение этого поля для каждого сотрудника вводит лишнюю избыточность.
Представьте, что отдел маркетинга меняет название на «Маркетинг и продажи». Чтобы сохранить согласованность, придется обновить ячейку в каждой строке таблицы для каждого сотрудника этого отдела! В третьей нормальной форме такого бы не произошло.Кроме того, вот, что произойдет, если Мэри решит покинуть компанию: мы должны удалить ее строку из таблицы, но если она была единственным сотрудником оперативного отдела, то отдел тоже придется удалить.
Всех этих проблем можно полностью избежать в третьей нормальной форме.
Мамины эксплойты. Ее дочь зовут Помогите! Меня заставляют подделывать паспорта
2. Создайте последнюю линию обороны в виде ограничений
База данных, с которой вы работаете, — это больше, чем просто группа таблиц. В нее встроена определенная функциональность. Многие из этих функций помогают обеспечить качество и корректность данных.
Ограничения устанавливают правила, какие значения можно вносить в поля БД.
Когда определяете отношения в базе данных, обязательно установите ограничения внешних ключей.
Обязательно укажите, что должно произойти при удалении и обновлении строки, связанной с другими строками в других таблицах (правила ON DELETE и ON UPDATE).
Обязательно используйте NOT NULL для всех полей, которые никогда не должны обнуляться. Возможно, есть смысл установить проверку на бэкенде, но помните, что сбои случаются всегда, поэтому не помешает добавить и такое ограничение.
Установите проверочные ограничения CHECK, чтобы убедиться — значения таблицы находятся в допустимом диапазоне, например, цена на товар всегда имеет положительное значение.
Интересный факт: в апреле 2020 года именно такое ограничение в программном обеспечении помешало торгам на московской бирже ММВБ, потому что цена на нефтяные фьючерсы WTI опустилась ниже нуля. В отличие от московской биржи, Нью-Йоркская товарная биржа NYMEX обновила софт за неделю до инцидента, поэтому сумела успешно провести сделки по отрицательной цене, то есть с доплатой покупателю от продавца — прим. пер.
Обо всех ограничениях PostgreSQL можно почитать здесь.
3. Никогда не храните в одном поле целые адреса
Если в вашем приложении или на веб-сайте есть форма с одним полем, где пользователь вводит свой адрес, то это уже плохо пахнет. Очень вероятно, что в этом случае у вас будет также одно поле в базе данных для хранения адреса в виде простой строки.
Но что делать, если нужно объединить покупки клиентов по городам, чтобы посмотреть, в каком городе какой продукт более популярен? Вы сможете это сделать?
Это будет очень тяжело!
Поскольку полный адрес хранится как строка в поле БД, в первую очередь придется разбираться, какая часть этой строки является городом! И это почти невыполнимая задача, учитывая все возможные форматы адресов в этом поле.
Поэтому обязательно разбивайте универсальное поле «Адрес» на конкретные поля: улица, номер дома, город, область, почтовый индекс и так далее.
Еще одна проблема адресов — «анонимные» поля
Вот иллюстрация из книги Майклза Блаха «Медная пуля для улучшения качества программного обеспечения»:
Поэтому не забывайте всегда давать четкие имена столбцов каждой единице информации.
Как составлять резюме
— У тебя есть опыт в SQL?
— Нет (No).
— Так и пиши: эксперт по NoSQL.
4. Никогда не храните в одном поле имя и фамилию
Аналогично ситуации с адресами: количество вариаций имени и фамилии слишком велико, чтобы их четко различать.
Конечно, можно отделить имя от фамилии, если между ними пробел.
Например, «Майк Альче» → имя «Майк» и фамилия «Альче».
Но что делать, если пользователь ввел второе имя? Или у него двойная фамилия? А что, если есть и второе имя, и двойная фамилия?
Как определить, где имя, а где фамилия, чтобы разделить строку? Ошибки неизбежны.
Способ избежать многих проблем — создать отдельные поля (в формах) для имен пользователей first_name и last_name. Таким образом, вы позволите пользователям разделить свои собственные имена и сможете хранить данные согласованным образом.
Примечание: я не говорю, что в полях БД запрещены пробелы. Например, для таких имен, как «Хуан Мартин Дель Потро», первая часть «Хуан Мартин» входит в поле first_name, а «Дель Потро» — в поле last_name. Конечно, это не идеально. Можно дополнительно завести столбцы middle_name и second_last_name. Посмотрите подробнее о возможных вариациях имен и фамилий в списке «Заблуждения программистов об именах» и статье «Заблуждения программистов об именах — с примерами». Придется согласиться на какой-то компромисс между точностью и практичностью.
5. Установите соглашения для имен таблиц и полей и придерживайтесь их
Довольно неприятно работать с данными, которые выглядят как user.firstName, user.lst_name, user.birthDate и так далее.
Я бы посоветовал установить правила именования с подчеркиванием, потому что не все SQL-движки одинаково обрабатывают заглавные буквы, а заключать всё в кавычки весьма утомительно.
Выберите так же, как называть таблицы — во множественном или единственном числе (например, users во множественном числе или user в единственном). Мне больше нравится единственное число, но все фреймворки для бэкенда, кажется, по умолчанию настроены на множественное. Приходится следовать шаблону и использовать множественное число.
Что еще почитать:
- Какую базу данных выбрать для проекта, чтобы не пришлось выбирать снова.
- Базы данных в IIoT-платформе: как Mail.ru Cloud Solutions работают с петабайтами данных от множества устройств.
- Наш канал в Телеграме о цифровой трансформации.
Содержание статьи
Обоснование статьи и некоторые ключевые понятия;
1. Справочники и связки;
1.1. Виды таблиц;
1.2. Виды справочников;
1.3. Виды связок;
2. Обобщение классификации;
2.1. Классификация в табличном виде;
2.2. Классификация в схематичном виде;
3. Некоторые комментарии по применению классификации;
3.1. Применение классификации при нормализации таблиц;
Заключение.
Обоснование статьи и некоторые ключевые понятия
Очень часто присутствовал на обучении дисциплине «Базы данных». Обучался когда-то сам… Как-то даже пришлось проводить целый курс для друзей и знакомых. Во время обучения мною было замечено, что трудности возникают уже на этапе понимания таблиц и того, как ими пользоваться. Многие просто не могли и не могут разработать простейшие базы данных. После более детального рассмотрения такого понятия как таблицы и маленькой классификации, трудности восприятия таблиц в реляционных базах данных почти всегда исчезают. Итак!
В данной статье будет рассмотрена маленькая классификация таблиц по признакам целостности и избыточности. Что это значит? Это значит, что будут приведены примеры с описанием, какую структуру таблиц можно делать, чтобы предотвращать (пытаться предотвращать) избыточность и добиваться целостности в реляционных базах данных.
Для понимания дадим краткие определения целостности и избыточности данных:
Целостность данных – это свойство способности по одним данным восстанавливать другие, при этом не теряя семантическое единство этих данных и отношения между ними (между данными).
Избыточность данных – это состояние базы данных, при котором в таблицах присутствуют лишние данные.
Целостность данных может быть нарушена в результате операций модификации данных. Если в базе данных запрещены операции удаления и обновления, то целостность может быть нарушена только в результате операции добавления, а также неправильно написанных скриптов по отображению данных.
1. Справочники и связки
1.1. Виды таблиц
Немного углубимся в маленькую классификацию таблиц по видам их структуры. Разделим таблицы на два общих вида. Первым видом будут таблицы-справочники, вторым таблицы-связки.
Рисунок 1. Справочники и связки
Информацию в таблицах можно разделить на два вида. На информацию, которая описывает объекты (субъекты), связи и информацию, которая описывает действия, процессы, события, иное.
В справочниках содержатся сведения об объектах и субъектах, связях. В связках содержатся сведения о действиях, процессах, событиях и так далее.
В связках хранятся данные, взятые из таблиц справочников. Поскольку невыгодно повторять одни и те же данные при описании объектов (субъектов) и при описании их взаимодействия, данные об объектах (субъектах) заносятся в справочники, а в таблицах-связках не хранятся данные объектов (субъектов) в чистом виде, а лишь ссылки на них (внешний ключ). Таким образом, в связках хранятся данные по взаимодействию объектов (субъектов) и ссылки на самих объектов (субъектов) (внешний ключ). Эти «ссылки» являются первичными ключами в таблицах справочниках. Но об этом потом…
Отличие справочника от связки выражается в том, что таблицы-справочники могут быть самостоятельными и независимыми (то есть, при чтении данных некоторых справочников можно в целом понять семантику), а таблицы-связки практически никогда.
1.2. Виды справочников
Справочники могут подразделяться на несколько видов. Это статичные, статично-динамичные и динамичные справочники. Разумеется, вряд ли можно назвать абсолютно статичный справочник, так как в этом мире может измениться всё. Или почти всё.
Статичный справочник – справочник, данные об объектах, субъектах, связях в котором либо никогда не подвергаются модификации после первичной модификации, либо настолько редко подвергаются модификации, что этим можно пренебречь.
Примером таких справочников могут служить список месяцев с названиями и номерами, список дней недели, список времён года, список океанов и так далее…
Номер | Наименование |
1 | Январь |
2 | Февраль |
3 | Март |
4 | Апрель |
5 | Май |
6 | Июнь |
7 | Июль |
8 | Август |
9 | Сентябрь |
10 | Октябрь |
11 | Ноябрь |
12 | Декабрь |
Таблица 1. Пример статичных справочников
Статично-динамичный справочник – справочник, в котором хранятся данные о связях, если связи носят справочный характер. В таком справочнике могут быть внешние ключи.
Наиболее удачным примером будет таблица с такими медицинскими данными, как вес. Список человек, вес которых измеряется, изменяется не так часто. А вот данные по их весу могут меняться каждый день. Статично-динамичные справочники являются единственными справочниками, где осознанно можно повторять любую информацию. Ещё одним примером может быть справочник окладов по должностям (по коду должности).
Код должности | Оклад | Дата обновления |
1001 | 12 000 | 05.02.2015 |
1002 | 17 000 | 01.02.2015 |
1003 | 11 500 | 01.02.2015 |
1004 | 25 450 | 01.02.2015 |
1005 | 10 000 | 01.02.2015 |
1006 | 6 000 | 04.02.2015 |
Таблица 2. Пример статично-динамичных справочников
Динамичные справочники – это таблицы, данные об объектах, субъектах, связях в которых меняются часто и используются в других таблицах. От статичных справочников отличаются только частотой модификации в них данных.
Примером таких таблиц могут быть списки проектов. На самом деле, данные об открытии или закрытии проектов могут находиться в самом справочнике проектов, что в большинстве случаев неправильно и нарушает целостность. С другой стороны, если хранить историю изменений по открытию и закрытию (приостановке) проектов, то можно получить избыточность данных. Целостность и избыточность данных будут бороться с друг другом ещё долго, также как и зима с летом.
Код проекта | Проект | Нормативный срок выполнения | Дата добавления | Пользователь |
PT102 | Покраска окон | 15 | 03.01.2014 | 1547 |
PT103 | Установка дверей | 10 | 04.01.2014 | 9874 |
PT587 | Проверка пожарных кранов | 2 | 04.01.2014 | 1456 |
PT588 | Замена люков | 3 | 02.01.2014 | 0147 |
PT133 | Очистка каналов | 11 | 09.02.2015 | 1547 |
Таблица 3. Пример динамичных справочников
Рисунок 2. Виды справочников
1.3. Виды связок
Таблицы-связки можно разделить на два вида.
Это справочник-связка (сразу же уточним, что справочник-связка справочником не является, назван так, потому что в нём существуют поля, которые образуют справочник, но в справочник выделены быть не могут). Таблица, в которой хранятся внешние ключи, данные, которые не являются справочными и поля, содержащие данные, которые образуют справочник, но не могут быть выделены в отдельную таблицу-справочник.
Примером справочника-связки будет являться таблица платёжных транзакций. Или таблица с данными о футбольном матче.
Код транзакции | Плательщик | Получатель | Сумма | Дата | Комментарий |
EEVS-doodi4 | 100045 | 57457 | -10 000 | 25.07.2014 | На сапоги |
UDFD-ioeed9 | 455780 | 10024 | -900 | 24.06.2014 | NULL |
PEDD-jdksl4 | 144770 | 56698 | -6980 | 01.01.2015 | NULL |
FDFE-keiiii0 | 447757 | 1 | 120 | 08.07.2014 | NULL |
Таблица 4. Пример справочника-связки
И связка (да, просто связка). Это таблица в которой хранятся только внешние ключи и данные, которые нельзя отнести к справочным, например дата или значения логических полей.
Примером связки будет являться таблица автоматического логирования терминала обработки данных.
Кстати, легко догадаться, что связки почти нигде не используются, поскольку чаще всего находятся данные, которые могут быть записаны в базу, но не содержаться в справочниках, поэтому невозможно сопоставить им внешний ключ.
Код | Код клиента | Показания счётчика | Месяц |
2334 | 35643 | 50 | 01.01.2015 |
2335 | 235673 | 49 | 01.01.2015 |
2335 | 436345 | 56 | 01.01.2015 |
2335 | 574733 | 24 | 01.01.2015 |
Таблица 5. Пример связки
Необходимо пояснить, что это за поля, которые образуют справочник, но не могут быть выделены в отдельную таблицу-справочник. Примером таких полей являются поля «комментарий», «жалоба», «описание», «предложение». Словом, если приводить популярный пример, то поле «сообщение» в таблице базы данных любой социальной сети…
Рисунок 3. Виды связок
2. Обобщение классификации
2.1. Классификация в табличном виде
Вид таблицы | Описание | Примеры | Плюсы (+) | Минусы(-) |
Статичный справочник | Таблица. Данные из неё берутся для других таблиц. Из справочника в других таблицах можно использовать только первичный ключ. В статичном справочнике должна содержаться информация, которая либо вообще не изменяется, либо изменяется так редко, что этим можно принебречь. На статичный справочник ссылаются (внешний ключ), когда нужно получить названия, обозначения, нормы, количественные или качественные показатели. Иное. | Справочник (наименований и номеров) месяцев. Справочник складов и цехов предприятия. Справочник правил игры. |
Иногда заменяет системные функции СУБД, позволяет более гибко работать с некоторыми данными. В случае, если меняется редко изменяемая информация, предостерегает от серьёзных последствий. | Использование таблицы с любой структурой может замедлять работу, в случае, если таблица заменяет системное хранилише. Приходится писать дополнительные функции и обработки для данной таблицы, которые не всегда правильно оптимизированны. В некоторых случаях невозможно оптимизировать. |
Статично-динамичный справочник | Таблица. Данные из неё берутся для других таблиц. Из справочника в других таблицах нельзя использовать внешний ключ этого справочника, однако можно использовать первичный ключ. | Справочник окладов по должностям. Справочник (размеров обуви, веса, роста, размера головы) физиологических параметров. Справочник (менеджеров, компаний) содержащий компании и менеджеров, которые эти компании обслуживают и учитывают. | Позволяет проводить гибкую нормализацию по схеме «Справочник-связка» = «Связка»+«Статично-динамичный справочник». | Справочник, выделенный из справочника-связки, никуда не девается и не имеет никакой реляционной связи, которая позволила бы ему превратиться в статичный или динамичный справочник. А значит, всегда избыточен. |
Динамичный справочник | Таблица. Данные из неё берутся часто для других таблиц. Из справочника в других таблицах можно использовать только первичный ключ. В динамичном справочнике должна содержаться информация, которая часто изменяется. | Справочник клиентов. Справочник поставщиков. Справочник контрагентов. Справочник менеджеров компании. Справочник работников. Справочник студентов. | Позволяет хранить динамичные данные, при этом давая возможность однозначно ссылаться на них. | Чаще всего накопительного типа и не делим, что создаёт определённую избыточность. |
Справочник-связка | Таблица. Данные из неё не могут содержаться в других таблицах, но на основе них могут быть созданы данные в других таблицах. | Платёжные транзакции. Продажи. Межзаводские перемещения. График перевозок. | Позволяет проводить гибкую нормализацию по схеме «Справочник-связка» = «Связка»+«Статично-динамичный справочник». | Справочник-связка после нормализации превращается в связку и сводит избыточность данных к минимуму, не затрагивая целостность, однако не делим и при архивировании в текущей таблице не подлежит оптимизации. |
Связка | Таблица. Данные из неё не могут содержаться в других таблицах, но на основе них могут быть созданы данные в других таблицах. Таблица не может содержать кортежей, значения атрибутов в которых являются неделимыми и не уникальными. | Автоматический лог ошибок в программе. Лог запроса сервера. Результаты трассировок. Отчёты о выгрузке и загрузке компонентов. Автоматические отчёты системы безопасности. | Связка сводит избыточность данных к минимуму, не затрагивая целостность. | Накапливаясь, является неделимой таблицей. Сложно оптимизировать. |
Таблица 6. Классификация
2.2. Классификация в схематичном виде
Рисунок 4. Схема классификации таблиц в реляционных базах данных по признакам целостности и избыточности данных
3. Некоторые комментарии по применению классификации
3.1. Применение классификации при нормализации таблиц
Процесс нормализации, если не учитывать некоторые этапы (Но учитывать результаты этих этапов!) — это обычное «дробление» таблиц на более мелкие таблицы с созданием реляционной связи между ними непосредственно или через промежуточные таблицы (связь «Многие ко многим»). Под реляционной связью может не всегда пониматься реляционное отношение!
Преобразование динамичного или статичного справочника в статично-динамичный справочник, а справочника-связки в связку, как и статично-динамичного справочника в справочник-связку — это ни что иное, как дробление таблиц. То есть, преобразование одного вида таблиц в другой через показанную выше классификацию в целях избежания избыточности данных — так можно определить нормализацию (один из вариантов определения).
Для примера. Пусть имеется база данных, в которой единственная операция по модификации данных — это добавление. В таком случае становится неэффективным каждый раз при изменении какого либо отдельного атрибута сущности, «копировать» остальные значения атрибутов уже в другой кортеж. В этом случае используются NULL или же создание статично-динамичного справочника, где описывается ряд атрибутов одной семантики или один атрибут, а дублируется лишь внешний ключ с первичным ключом последовательности. Этот же метод может использоваться в традиционной схеме модификации данных с обновлением и удалением данных.
Заключение
Данная классификация была создана мной на основе наблюдений при проектировании баз данных, а также исходя из прочитанной теории по проектированию в реляционных СУБД. Моим друзьям и знакомым, изучающим дисциплину «базы данных» и занимающимся проектированием баз данных, и мне эта классификация достаточно серьёзно упростила «жизнь» и позволила во многих ситуациях заранее выбрать наиболее подходящий и, как оказывалось потом, правильный вид таблицы для хранения в ней тех или иных данных.
Классификация может быть расширена разделением существующих видов в ней на подвиды (возможно, даже, добавлением новых видов). Также эта классификация показала, что лучше в некоторых ситуациях не использовать тот или иной вид таблиц. Некоторые виды таблиц из данной классификации лучше использовать реже (динамичные справочники). А некоторые пытаться заменить на другие (справочники-связки на связки).
Надеюсь, кому ни будь ещё поможет эта классификация при освоении дисциплины «Базы данных» и при проектировании баз данных в реляционных СУБД.
База данных стран, регионов и городов / Хабр
База данных стран, регионов и городов под лицензией MIT. База данных представлена в виде sql скрипта для PostgreSQL. При запуске скрипт создает необходимые таблицы и заполняет их данными. База данных содержит:Страны | 218 |
Регионы | 1611 |
Города | 17287 |
Страна | Количество регионов | Количество городов |
Абхазия | 1 | 10 |
Австралия | 9 | 208 |
Австрия | 9 | 186 |
Азербайджан | 3 | 76 |
Албания | 12 | 41 |
Алжир | 1 | 10 |
Ангола | 1 | 7 |
Ангуилья | 1 | 2 |
Андорра | 8 | 19 |
Антигуа и Барбуда | 1 | 8 |
Антильские о-ва | 1 | 1 |
Аргентина | 24 | 184 |
Армения | 12 | 247 |
Арулько | 1 | 1 |
Афганистан | 1 | 6 |
Багамские о-ва | 1 | 1 |
Бангладеш | 1 | 2 |
Барбадос | 1 | 1 |
Бахрейн | 1 | 2 |
Беларусь | 6 | 153 |
Белиз | 1 | 1 |
Бельгия | 11 | 203 |
Бенин | 1 | 1 |
Бермуды | 1 | 1 |
Болгария | 29 | 371 |
Боливия | 8 | 34 |
Босния/Герцеговина | 3 | 26 |
Ботсвана | 1 | 3 |
Бразилия | 21 | 99 |
Британские Виргинские о-ва | 1 | 1 |
Бруней | 1 | 1 |
Буркина Фасо | 1 | 2 |
Бурунди | 1 | 1 |
Бутан | 1 | 1 |
Валлис и Футуна о-ва | 1 | 1 |
Вануату | 1 | 2 |
Великобритания | 17 | 468 |
Венгрия | 23 | 83 |
Венесуэла | 23 | 72 |
Восточный Тимор | 1 | 1 |
Вьетнам | 6 | 11 |
Габон | 1 | 2 |
Гаити | 6 | 6 |
Гайана | 1 | 1 |
Гамбия | 1 | 1 |
Гана | 1 | 1 |
Гваделупа | 2 | 2 |
Гватемала | 11 | 20 |
Гвинея | 1 | 2 |
Гвинея-Бисау | 1 | 1 |
Германия | 16 | 2080 |
Гернси о-в | 1 | 1 |
Гибралтар | 1 | 6 |
Гондурас | 1 | 1 |
Гонконг | 1 | 1 |
Гренада | 1 | 1 |
Гренландия | 1 | 1 |
Греция | 51 | 333 |
Грузия | 2 | 66 |
Дания | 16 | 318 |
Джерси о-в | 1 | 1 |
Джибути | 1 | 1 |
Доминиканская республика | 1 | 1 |
Египет | 8 | 10 |
Замбия | 1 | 3 |
Западная Сахара | 1 | 2 |
Зимбабве | 1 | 2 |
Израиль | 8 | 71 |
Индия | 22 | 63 |
Индонезия | 1 | 1 |
Иордания | 1 | 1 |
Ирак | 3 | 3 |
Иран | 12 | 16 |
Ирландия | 26 | 131 |
Исландия | 11 | 17 |
Испания | 52 | 590 |
Италия | 100 | 814 |
Йемен | 1 | 2 |
Кабо-Верде | 1 | 1 |
Казахстан | 19 | 251 |
Камбоджа | 1 | 1 |
Камерун | 4 | 4 |
Канада | 13 | 248 |
Катар | 1 | 1 |
Кения | 5 | 12 |
Кипр | 2 | 6 |
Кирибати | 1 | 9 |
Китай | 30 | 255 |
Колумбия | 19 | 54 |
Коморские о-ва | 1 | 1 |
Конго (Brazzaville) | 1 | 3 |
Конго (Kinshasa) | 1 | 1 |
Коста-Рика | 7 | 32 |
Кот-д»Ивуар | 1 | 2 |
Куба | 15 | 69 |
Кувейт | 2 | 2 |
Кука о-ва | 1 | 1 |
Кыргызстан | 5 | 73 |
Лаос | 1 | 1 |
Латвия | 1 | 57 |
Лесото | 1 | 1 |
Либерия | 1 | 1 |
Ливан | 1 | 2 |
Ливия | 2 | 2 |
Литва | 1 | 81 |
Лихтенштейн | 6 | 6 |
Люксембург | 4 | 38 |
Маврикий | 1 | 1 |
Мавритания | 1 | 1 |
Мадагаскар | 1 | 6 |
Македония | 24 | 28 |
Малави | 1 | 1 |
Малайзия | 1 | 1 |
Мали | 1 | 3 |
Мальдивские о-ва | 1 | 1 |
Мальта | 1 | 40 |
Марокко | 2 | 2 |
Мартиника о-в | 1 | 1 |
Мексика | 32 | 170 |
Мозамбик | 1 | 4 |
Молдова | 1 | 61 |
Монако | 1 | 7 |
Монголия | 1 | 3 |
Мьянма (Бирма) | 1 | 2 |
Мэн о-в | 1 | 6 |
Намибия | 1 | 3 |
Науру | 1 | 3 |
Непал | 1 | 1 |
Нигер | 1 | 5 |
Нигерия | 1 | 2 |
Нидерланды (Голландия) | 12 | 280 |
Никарагуа | 4 | 7 |
Новая Зеландия | 14 | 21 |
Новая Каледония о-в | 1 | 1 |
Норвегия | 20 | 248 |
Норфолк о-в | 1 | 1 |
О.А.Э. | 2 | 2 |
Оман | 1 | 3 |
Пакистан | 1 | 3 |
Панама | 5 | 13 |
Папуа Новая Гвинея | 1 | 2 |
Парагвай | 5 | 9 |
Перу | 23 | 62 |
Питкэрн о-в | 1 | 1 |
Польша | 60 | 325 |
Португалия | 21 | 277 |
Пуэрто Рико | 1 | 15 |
Реюньон | 1 | 1 |
Россия | 78 | 2533 |
Руанда | 1 | 1 |
Румыния | 42 | 264 |
Сальвадор | 6 | 6 |
Самоа | 1 | 2 |
Сан-Марино | 3 | 4 |
Сан-Томе и Принсипи | 1 | 1 |
Саудовская Аравия | 1 | 6 |
Свазиленд | 1 | 1 |
Святая Люсия | 1 | 1 |
Святой Елены о-в | 1 | 1 |
Северная Корея | 1 | 1 |
Сейшеллы | 1 | 1 |
Сен-Пьер и Микелон | 1 | 1 |
Сенегал | 1 | 1 |
Сент-Винсент и Гренадины | 1 | 1 |
Сент Китс и Невис | 1 | 1 |
Сербия | 3 | 20 |
Сингапур | 1 | 1 |
Сирия | 1 | 1 |
Словакия | 7 | 16 |
Словения | 3 | 12 |
Соломоновы о-ва | 1 | 1 |
Сомали | 1 | 1 |
Судан | 1 | 8 |
Суринам | 1 | 1 |
США | 53 | 1591 |
Сьерра-Леоне | 1 | 1 |
Таджикистан | 5 | 58 |
Таиланд | 3 | 3 |
Тайвань | 1 | 1 |
Танзания | 1 | 4 |
Того | 1 | 1 |
Токелау о-ва | 1 | 1 |
Тонга | 1 | 1 |
Тринидад и Тобаго | 1 | 1 |
Тувалу | 1 | 1 |
Тунис | 1 | 1 |
Туркменистан | 5 | 40 |
Туркс и Кейкос | 1 | 2 |
Турция | 36 | 37 |
Уганда | 2 | 2 |
Узбекистан | 13 | 108 |
Украина | 26 | 765 |
Уругвай | 11 | 20 |
Фарерские о-ва | 1 | 1 |
Фиджи | 1 | 2 |
Филиппины | 1 | 7 |
Финляндия | 7 | 301 |
Франция | 93 | 546 |
Французская Гвинея | 1 | 3 |
Французская Полинезия | 1 | 1 |
Хорватия | 12 | 32 |
Чад | 1 | 3 |
Черногория | 1 | 7 |
Чехия | 15 | 116 |
Чили | 13 | 63 |
Швейцария | 26 | 222 |
Швеция | 22 | 285 |
Шри-Ланка | 1 | 1 |
Эквадор | 13 | 28 |
Экваториальная Гвинея | 1 | 1 |
Эритрея | 1 | 1 |
Эстония | 1 | 39 |
Эфиопия | 1 | 3 |
ЮАР | 1 | 1 |
Южная Корея | 17 | 31 |
Южная Осетия | 1 | 2 |
Ямайка | 1 | 1 |
Япония | 38 | 122 |
NoSQL базы данных: хранилища и доступность данных
Рассказываем о NoSQL системах баз данных: что это такое, где такие системы применяются и каких видов бывают. Рассмотрим различные виды хранилищ и 2 теоремы.
Традиционные системы управления реляционными базами данных предоставляют мощные механизмы для хранения данных и построения запросов к ним. За годы использования эти системы сильно развились и сейчас гарантируют стабильность работы и надежность транзакций.
Однако в последние годы в некоторых областях стало храниться слишком много полезных данных, использование и хранение которых традиционными методами становится затруднительно. К этим областям можно отнести пользовательский контент социальных сетей и данные, полученные из других обширных сетей (так называемые «большие данные» или попросту «бигдата»).
Для такого типа данных создаются и развиваются NoSQL решения, которые способны обеспечивать горизонтальную масштабируемость и большую отзывчивость, но жертвуют при этом надежностью транзакций.
Чтобы абстрагироваться от подробностей реализации отдельной NoSQL системы, для группирования похожих хранилищ данных могут быть использованы высокоуровневые критерии. Рассмотрим два наиболее известных подхода: модели данных и CAP.
Различные модели данных
Модели, которые мы будем рассматривать, можно категоризировать по тому, как они хранят и дают доступ к данным. Здесь можно выделить следующие типы хранилищ: ключ-значение, хранилище документов и хранилище с широким столбцом.
Ключ-значение
Хранилище вида ключ-значение состоит из наборов пар ключ-значение с уникальным ключом для каждого. Набор операций для такого хранилища ограничен простым CRUD (Create, Read, Update, Delete). Эти хранилища еще называют схематическими: все сведения о структуре хранимых данных неявно описываются в логике приложения (схема на чтение) и явно определяются языком определения данных (схема на запись).
Очевидное преимущество этой модели – ее простота. Простая структура хранилища дает системе базы данных высокую пропускную способность. Однако если потребуются более сложные операции запроса, например, запрос определенного диапазона, эта система окажется не так сильна.
На рисунке показано, как в ключе могут хранится данные и настройки учетной записи. Поскольку сложные операции запросов не поддерживаются, данные придется неэффективно анализировать в коде программы и тратить время на выделение нужных.
Хранилище документов
По структуре такое хранилище похоже на ключ-значение, но в значении могут храниться только структурированные документы, вроде JSON. Это ограничение обеспечивает большую гибкость при доступе к данным. Проще не только найти информацию по конкретному ключу, но и позже выделить ее из документа.
Хранилище с широким столбцом
Структура хранилища с широким столбцом отчасти похожа на традиционную реляционную базу данных. Однако технически такое хранилище больше напоминает распределенную многоуровневую сортированную карту: ключи первого уровня идентифицируют строки, которые, в свою очередь, состоят из пар ключ-значение. Ключи первого уровня называются ключами строк, ключи второго уровня называются ключами столбцов.
Такая схема хранения дает возможность создать таблицу с произвольным количеством столбцов. При этом она обеспечивает высокоэффективное сжатие данных при хранении.
Другое определяющее свойство базы данных, кроме того, как данные хранятся, это уровень их согласованности. Одни базы создаются с учетом высокой согласованности и сериализации данных (ACID), другие делают упор на доступность данных (BASE). Этот компромисс присущ каждой распределенной системе баз данных, и большое число NoSQL баз показывает широкий спектр решений между этими двумя парадигмами. Рассмотрим две теоремы: CAP и PACELS, согласно которым системы баз данных можно классифицировать по их положению в этом спектре.
CAP
CAP описывает ограничения, накладываемые на систему базы данных. В этой теореме говорится, что последовательное чтение/запись не может быть реализовано в асинхронной системе. Другими словами, может быть реализовано не более двух из следующих трех свойств одновременно:
- Согласованность: чтение и запись выполняются атомарно и строго согласованы.
- Доступность: каждый неуправляемый узел в системе всегда может принимать запросы на чтение и запись от клиента клиентам и возвращать с содержательный ответ, то есть не сообщение об ошибке.
- Устойчивость к разделению: разделение распределённой системы на несколько изолированных секций не приводит к некорректности отклика от каждой из секций.
PACELC
Эта теорема расширяет теорему CAP. Она гласит, что в случае разделения сети, как и CAP, необходимо выбирать между доступностью и согласованностью. Но даже если разделения нет, нужно делать выбор между задержками и согласованностью.
Следующая статья
Выбор имени базы данных
Имя базы данных состоит из различных строк и должно содержать только разрешенные символы. При выборе имени базы данных просмотрите следующие рекомендации.
В поле ввода имени базы данных устанавливаются следующие значения параметров инициализации Oracle:
DB_NAME
DB_UNIQUE_NAME
DB_DOMAIN
В средах Oracle RAC часть имени базы данных (DB_UNIQUE_NAME) представляет собой строку длиной не более 30 символов, которая может содержать буквы, цифры, подчеркивания (_), доллары ($) и фунты (#), но должна начинаться с букв персонаж.Другие специальные символы не допускаются в имени базы данных. Параметр DB_NAME для базы данных устанавливается на первые 8 символов имени базы данных.
Доменная часть имени глобальной базы данных (DB_DOMAIN) может содержать не более 128 символов. Доменные имена с использованием подчеркивания (_) не допускаются. Значения DB_UNIQUE_NAME.DB_DOMAIN в целом должны быть уникальными на предприятии.
Примечание:
Для баз данных Oracle Real Applications Cluster (Oracle RAC) имя подключаемой базы данных (PDB) должно быть уникальным в кластере.Имя базы данных и ORACLE_SID
Префикс Oracle Service Identifier (SID) — это первые 8 символов имени базы данных. Префикс SID может содержать только символы a-z, A-Z и 0-9. Префикс SID не может содержать специальные символы операционной системы, поэтому если вы используете специальные символы в первых 8 символах имени базы данных, то эти специальные символы в префиксе SID опускаются. Для каждой базы данных существует один префикс SID.Префикс SID для базы данных должен быть уникальным в кластере.
Для базы данных Oracle RAC каждый экземпляр имеет уникальный идентификатор ORACLE_SID
, который состоит из префикса SID и номера экземпляра. Префикс ORACLE_SID
может содержать до 12 символов. ORACLE_SID
для экземпляров базы данных Oracle RAC генерируется по-разному, в зависимости от способа управления базой данных. Если вы выбираете управляемую политикой базу данных, Oracle генерирует SID в формате name_ #, где name — это первые восемь буквенно-цифровых символов DB_UNIQUE_NAME, а # — номер экземпляра.Если вы выбираете управляемую администратором базу данных, Oracle Database Configuration Assistant генерирует SID по умолчанию для имен экземпляров, используя имя формата #, где name — это первые восемь буквенно-цифровых символов DB_UNIQUE_NAME, а # — номер экземпляра. Однако во время установки или создания базы данных вы можете указать значение по умолчанию для SID. Номер экземпляра автоматически добавляется в конец этой строки для каждого экземпляра.
Для базы данных Oracle RAC One Node имя экземпляра ORACLE_SID_1, которое состоит из _1
, добавленного к префиксу SID.Во время онлайн-перемещения запускается второй экземпляр ORACLE_SID_2, который становится единственным экземпляром после завершения перемещения. Следующее перемещение онлайн использует ORACLE_SID_1 для нового экземпляра.
Пример 3-1 Глобальное имя базы данных и соответствующие параметры инициализации
Если ваша база данных имеет глобальное имя базы данных orl $ racprod2551.example.com
, которое вы указали во время установки, то следующие параметры используются для параметров инициализации:
Параметр | Значение |
---|---|
DB_UNIQUE_NAME | |
DB_DOMAIN | |
DB_NAME | |
Пример 3-2 DB_UNIQUE_NAME и связанные значения ORACLE_SID
Если DB_UNIQUE_NAME для базы данных — или $ racprod2551
, то используются следующие значения SID:
База данных или тип экземпляра | Значение, используемое для ORACLE_SID |
---|---|
База данных Oracle с одним экземпляром | |
Управляемый политикой экземпляр Oracle RAC | |
Управляемый администратором экземпляр Oracle RAC | |
Экземпляр базы данных Oracle RAC One Node | |
- Товары
- Клиенты
- Случаи использования
- Переполнение стека Публичные вопросы и ответы
- Команды Частные вопросы и ответы для вашей команды
- предприятие Частные вопросы и ответы для вашего предприятия
- работы Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимать технический талант
- реклама Связаться с разработчиками по всему миру
Загрузка…
- Авторизоваться Зарегистрируйтесь
Как запросить имя базы данных в Oracle SQL Developer?
Переполнение стека- Товары
- Клиенты
- Случаи использования
- Переполнение стека Публичные вопросы и ответы
- Команды Частные вопросы и ответы для вашей команды
- предприятие Частные вопросы и ответы для вашего предприятия
- работы Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимать технический талант
Имя базы данных MySQL с недопустимыми символами
Переполнение стека- Товары
- Клиенты
- Случаи использования
- Переполнение стека Публичные вопросы и ответы
- Команды Частные вопросы и ответы для вашей команды
- предприятие Частные вопросы и ответы для вашего предприятия
- работы Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимать технический талант
- реклама Связаться с разработчиками по всему миру