Реляционная база данных: различия между версиями

[непроверенная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
Каком смысл помещать в статью то, что раскрыто в других статьях?
Строка 6:
 
Для работы с реляционными БД применяют [[реляционные СУБД]].
 
==Реляционная модель==
{{main|Реляционная модель данных}}
Эта модель организует данные в одну или несколько [[Отношение (реляционная модель)| таблиц]] (или «отношений») столбцов и строк с уникальным ключом, идентифицирующим каждую строку. Строки также называются [[Запись (тип данных)|записями]] или [[Кортеж (информатика)|кортежами]]. Столбцы также называются атрибутами. Как правило, каждая таблица(отношение) представляет собой один тип сущности (например, клиент или продукт). Строки представляют экземпляры этого типа сущности (например, «Вася» или «стул») и столбцы, представляющие значения, присваиваемые этому экземпляру (например, адрес или цена).
 
== Ключи ==
 
Каждая строка в таблице имеет свой собственный уникальный ключ. Строки в таблице можно связать с строками в других таблицах, добавив столбец для уникального ключа связанной строки (такие столбцы известны как [[Внешний ключ|внешние ключи]] (ВК). Кодд показал, что отношения данных произвольной сложности могут быть представлены простым набором понятий.
 
Часть этой обработки включает в себя возможность выбора или изменения одной и только одной строки в таблице. Поэтому большинство физических реализаций имеют уникальный [[Первичный ключ]] (ПК) для каждой таблицы. Когда новая таблица записывается в таблицу, генерируется новое уникальное значение для первичного ключа; это ключ, который система использует прежде всего для доступа к таблице. Производительность системы оптимизирована для ПК. Другой, более [[естественный ключ]] также может быть идентифицирован и определен как [[интеллектуальный ключ]] (ИK). Часто для формирования ИK требуется несколько столбцов (это одна из причин, почему один целочисленный столбец обычно делается ПK). И ПК, и ИК имеют возможность однозначно идентифицировать строку внутри таблицы. Дополнительные технологии могут применяться для обеспечения уникального идентификатора по всему миру, [[UUID|глобально-уникальный идентификатор]] при более широких системных требованиях.
 
Первичные ключи в базе данных используются для определения отношений между таблицами. Когда ПK переносится в другую таблицу, он становится внешним ключом в другой таблице. Когда каждая ячейка может содержать только одно значение, а ПК переходит в обычную таблицу сущностей, этот шаблон проектирования может представлять собой отношение «один к одному» или «один ко многим». Большинство реляционных проектов баз данных разрешают отношения «многие-ко-многим», создавая дополнительную таблицу, содержащую ПK, из обеих таблиц сущностей - отношение становится сущностью; таблица разрешения затем называется соответствующим образом, и два ВK объединяются для формирования ПK. Перенос ПK в другие таблицы является второй основной причиной, по которой системные целые числа обычно используются как ПK; редко демонстрирует эффективность при переносе множества столбцов других типов.
 
=== Отношения ===
Отношения являются логической связью между различными таблицами, созданной на основе взаимодействия между этими таблицами.
 
== Транзакции ==
Чтобы система управления базами данных (СУБД) работала эффективно и точно, она должна использовать [[ACID|транзакции]]
 
== Хранимые процедуры ==
 
Большая часть программирования в СУБД выполняются с использованием [[Хранимая процедура|хранимых процедур]]. Часто процедуры могут использоваться для значительного сокращения объема информации, передаваемой внутри и вне системы. Для повышения безопасности дизайн системы может предоставлять доступ только к хранимым процедурам, а не непосредственно к таблицам. Основные хранимые процедуры содержат логику, необходимую для вставки новых и обновления существующих данных. Более сложные процедуры могут быть написаны для реализации дополнительных правил и логики, связанных с обработкой или выбором данных.
 
==Отношения или таблицы==
{{main|Отношение (реляционная модель)|Таблица (база данных)}}
[[Отношение (реляционная модель)| Отношения]] определяются как набор [[Кортеж (информатика)|кортежей]], которые имеют одинаковый атрибут. Кортеж обычно представляет объект и информацию об этом объекте. Объектами обычно являются физические объекты или понятия. Отношение обычно описываются как [[таблица (базы данных) | таблица]], которая организована в рядках и колонках. Все данные, на которые ссылается атрибут, находятся в одном и том же [[Домен (базы данных)| домене]] и соответствуют тем же ограничениям.
 
Реляционная модель указывает, что кортежи отношения не имеют определенного порядка и что кортежи, в свою очередь, не налагают порядок на атрибуты. Приложения получают доступ к данным путем указания запросов, которые используют такие операции, как «выбор» для идентификации кортежей, «проект» для идентификации атрибутов и «объединение» для объединения отношений. Отношения могут быть изменены с помощью операторов INSERT, DELETE и UPDATE. Новые кортежи могут предоставлять явные значения или быть выведены из запроса. Аналогично, запросы определяют кортежи для обновления или удаления.
 
Кортежи по определению уникальны. Если кортеж содержит [[Потенциальный ключ| потенциальный ключ]] или первичный ключ, то, очевидно, он уникален; однако первичный ключ не обязательно должен быть определен для строки или записи как кортеж. Определение кортежа требует, чтобы оно было уникальным, но не требует определения первичного ключа. Поскольку кортеж уникален, его атрибуты по определению составляют [[суперключ]].
 
== Базовые и производные отношения ==
{{main | Представление (базы данных)}}
В реляционной базе данных все данные хранятся и доступны через [[Отношение (реляционная модель) | отношения]]. Отношения, которые хранят данные, называются «базовыми отношениями», а в реализациях называются «таблицами». Другие отношения не хранят данные, а вычисляются путем применения реляционных операций к другим отношениям. Эти отношения иногда называют «производными отношениями». В реализациях они называются «[[Представление (базы данных) |представлением]]» или «запрос». Производные отношения удобны тем, что они действуют как одно отношение, даже если они могут захватывать информацию из нескольких отношений. Кроме того, производные отношения могут использоваться как [[Уровень абстракции (программирование)|уровень абстракции]].
 
=== Домен ===
{{main | Домен (базы данных)}}
Домен описывает набор возможных значений для данного атрибута и может рассматриваться как ограничение на значение атрибута. Математически присоединение домена к атрибуту означает, что любое значение атрибута должно быть элементом указанного набора.
Примерами могут являться типы «целое» (множество всех целых чисел), «строка» (множество всех строк), «номер детали» (множество всех номеров деталей) и т.д. Таким образом, когда мы говорим, что некоторое отношение имеет атрибут типа «целое», мы имеем в виду, что все значения этого атрибута принадлежат множеству «целое» и никакому другому.
 
== Реляционные операции ==
{{main | Реляционная алгебра}}
Запросы к реляционной базы данных, и полученные результаты в базе данных выражаются в [[Реляционное исчисление|реляционном исчислении]] или [[Реляционная алгебра|реляционной алгебре]]. В своей первоначальной реляционной алгебре Кодд представил восемь реляционных операторов в двух группах по четыре оператора. Первые четыре оператора были основаны на традиционной математической [[Теория множеств |теории множеств]]:
* Оператор [[Объединение множеств | объединение]] объединяет кортежи из двух [[Отношение (реляционная модель)| отношений]] и удаляет все дубликаты кортежей из результата. Оператор реляционного объединения эквивалентен оператору [[Union (SQL)|SQL UNION]].
* Оператор [[Пересечение множеств | пересечение]] создает набор кортежей, совместно используемых двумя отношениями. Пересечение реализовано в SQL в виде оператора INTERSECT.
* Оператор [[Разность множеств | разность]] действует на два отношения и порождает множество кортежей из первого отношения, которое не существует во втором отношении. Разность реализована в SQL в виде оператора EXCEPT или MINUS.
* [[Прямое произведение|прямое(или декартово) произведение]] двух отношений является объединением, которое не ограничено никакими критериями, в результате чего каждый кортеж первого отношения сопоставляется с каждым набором второго отношения. Декартово произведение реализовано в SQL как оператор [[Cross join | CROSS JOIN]].
Остальные операторы, предлагаемые Коддом, включают специальные операции, специфичные для реляционных баз данных:
* Выбор или ограничение операции извлекает кортежи из отношения, ограничивая результаты только теми, которые соответствуют конкретному критерию, т.е. [[Подмножество]] в терминах теории множеств. SQL-эквивалент выбора - это запрос [[Select (SQL) | SELECT]] с предложением [[Where (SQL) | WHERE]].
* Операция [[Алгебра Кодда | проекция]] извлекает только указанные атрибуты из кортежа или набора кортежей.
* Операция объединения, определенная для реляционных баз данных, часто называется естественным соединением. В этом типе соединения два отношения связаны их общими атрибутами. Приближение MySQL естественного объединения - это оператор [[Inner join | INNER JOIN]]. В SQL, INNER JOIN предотвращает появление декартового произведения, когда в запросе есть две таблицы. Для каждой таблицы, добавленной в SQL Query, добавляется еще один INNER JOIN для предотвращения декартова произведения. Таким образом, для N таблиц в SQL-запросе для предотвращения декартова продукта должен быть N-1 INNER JOINS.
* Операция [[Реляционная алгебра # Дивизия | реляционное деление]] представляет собой несколько более сложную операцию и по существу включает в себя использование кортежей одного отношения (дивиденда) для разбиения второго отношения (делителя). Оператор реляционного деления фактически является противоположным декартовому оператору произведения (отсюда и название).
Другие операторы были введены или предложены с момента введения Коддом исходных восьми, включая операторы и расширения реляционных сравнений, которые предлагают, помимо прочего, поддержку вложенных и иерархических данных.
 
== Нормализация ==
{{main|Нормальная форма}}
Целью нормализации реляционной базы данных является устранение недостатков структуры базы данных, приводящих к избыточности, которая, в свою очередь, потенциально приводит к различным аномалиям и нарушениям целостности данных.
 
Теоретики реляционных баз данных в процессе развития теории выявили и описали типичные примеры избыточности и способы их устранения.
Наиболее распространенные формы нормализации, применяемые к базам данных, называются [[Нормальная форма|нормальными формами]].
 
== См. также ==