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

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
Нет описания правки
Строка 31:
==Отношения или таблицы==
{{main|Отношение (реляционная модель)|Таблица (база данных)}}
[[Отношение (реляционная модель)| Отношения]] определяются как набор [[Кортеж (информатика)|кортежей]], которые имеют одинаковый атрибут. Кортеж обычно представляет объект и информацию об этом объекте. Объектами обычно являются физические объекты или понятия. Отношение обычно описываются как [[таблица (базы данных) | таблица]], которая организована в рядках и колонках. Все данные, на которые ссылается атрибут, находятся в одном и том же [[ОбластьДомен определения(базы функцииданных)| домене]] и соответствуют тем же ограничениям.
 
Реляционная модель указывает, что кортежи отношения не имеют определенного порядка и что кортежи, в свою очередь, не налагают порядок на атрибуты. Приложения получают доступ к данным путем указания запросов, которые используют такие операции, как «выбор» для идентификации кортежей, «проект» для идентификации атрибутов и «объединение» для объединения отношений. Отношения могут быть изменены с помощью операторов INSERT, DELETE и UPDATE. Новые кортежи могут предоставлять явные значения или быть выведены из запроса. Аналогично, запросы определяют кортежи для обновления или удаления.
 
Кортежи по определению уникальны. Если кортеж содержит [[Потенциальный ключ| потенциальный ключ]] или первичный ключ, то, очевидно, он уникален; однако первичный ключ не обязательно должен быть определен для строки или записи как кортеж. Определение кортежа требует, чтобы оно было уникальным, но не требует определения первичного ключа. Поскольку кортеж уникален, его атрибуты по определению составляют [[суперключ]].
 
== Базовые и производные отношения ==
{{main | Представление (базы данных)}}
В реляционной базе данных все данные хранятся и доступны через [[Отношение (реляционная модель) | отношения]]. Отношения, которые хранят данные, называются «базовыми отношениями», а в реализациях называются «таблицами». Другие отношения не хранят данные, а вычисляются путем применения реляционных операций к другим отношениям. Эти отношения иногда называют «производными отношениями». В реализациях они называются «[[Представление (базы данных) |представлением]]» или «запрос». Производные отношения удобны тем, что они действуют как одно отношение, даже если они могут захватывать информацию из нескольких отношений. Кроме того, производные отношения могут использоваться как [[Уровень абстракции (программирование)|уровень абстракции]].
 
=== Домен ===
{{main | Домен (базы данных)}}
Домен описывает набор возможных значений для данного атрибута и может рассматриваться как ограничение на значение атрибута. Математически присоединение домена к атрибуту означает, что любое значение атрибута должно быть элементом указанного набора.
Примерами могут являться типы «целое» (множество всех целых чисел), «строка» (множество всех строк), «номер детали» (множество всех номеров деталей) и т.д. Таким образом, когда мы говорим, что некоторое отношение имеет атрибут типа «целое», мы имеем в виду, что все значения этого атрибута принадлежат множеству «целое» и никакому другому.
 
== Реляционные операции ==
{{main | Реляционная алгебра}}
Запросы к реляционной базы данных, и полученные результаты в базе данных выражаются в [[Реляционное исчисление|реляционном исчислении]] или [[Реляционная алгебра|реляционной алгебре]]. В своей первоначальной реляционной алгебре Кодд представил восемь реляционных операторов в двух группах по четыре оператора. Первые четыре оператора были основаны на традиционной математической [[Теория множеств |теории множеств]]:
* Оператор [[Объединение множеств | объединение]] объединяет кортежи из двух [[Отношение (реляционная модель)| отношений]] и удаляет все дубликаты кортежей из результата. Оператор реляционного объединения эквивалентен оператору [[Union (SQL)|SQL UNION]].
* Оператор [[Пересечение множеств | пересечение]] создает набор кортежей, совместно используемых двумя отношениями. Пересечение реализовано в SQL в виде оператора [[Intersect (SQL) | INTERSECT]].
* Оператор [[Разность множеств | разность]] действует на два отношения и порождает множество кортежей из первого отношения, которое не существует во втором отношении. Разность реализована в SQL в виде оператора [[Except (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|Нормальная форма}}
Целью нормализации реляционной базы данных является устранение недостатков структуры базы данных, приводящих к избыточности, которая, в свою очередь, потенциально приводит к различным аномалиям и нарушениям целостности данных.
 
Теоретики реляционных баз данных в процессе развития теории выявили и описали типичные примеры избыточности и способы их устранения.
Наиболее распространенные формы нормализации, применяемые к базам данных, называются [[Нормальная форма|нормальными формами]].
 
== См. также ==