Реляционная модель данных. Ключи — различия между версиями
(Добавила литературу.) |
м (rollbackEdits.php mass rollback) |
||
| (не показаны 22 промежуточные версии 4 участников) | |||
| Строка 1: | Строка 1: | ||
| − | = | + | {{Определение |
| − | + | |definition = | |
| − | === | + | '''Реляционная модель данных''' — это модель данных, построенная на логике первого порядка <ref>[https://en.wikipedia.org/wiki/First-order_logic First-order logic — Wikipedia]</ref>, где все данные представлены в виде кортежей, связанных отношениями.}} |
| − | === | + | |
| − | === | + | == Отношение == |
| + | === Определение и пример === | ||
| + | {{Определение | ||
| + | |definition = | ||
| + | '''Отношение''' — это кортеж с именем, состоящий из (Заголовок, Тело), где: | ||
| + | * Заголовок отношения — описание данных, представляющее собой множество пар <code>{имя: тип}</code>, | ||
| + | * Тело отношения — данные, представляющие собой множество множеств пар <code>{имя: значение}</code>.}} | ||
| + | Заданное отношение соответствует тому, что мы называли расширением предиката <ref>[https://en.wikipedia.org/wiki/Extension_(predicate_logic) Extension (predicate logic) — Wikipedia]</ref> в логике первого порядка. | ||
| + | |||
| + | ''' Пример отношения ''' | ||
| + | |||
| + | '''{id: int, name: string}''' | ||
| + | {{id: 10, name: Иванов}, | ||
| + | {id: 20}} | ||
| + | |||
| + | === Отношения и математика === | ||
| + | |||
| + | <tex> | ||
| + | R = (\{a_1:T_1,a_2:T_2,\dots,a_n:T_n\},\{\{a_1:v_1,a_2:v_2,\dots ,a_n:v_n\},\dots\}) \\ | ||
| + | R(a_1,a_2,\dots ,a_n)⊂T_1×T_2×\cdots×T_n \\ | ||
| + | \;\;(v_1,v_2,\dots ,v_n)∈T_1×T_2×\cdots×T_n</tex> | ||
| + | |||
| + | === Отношения и таблицы === | ||
| + | Изоморфизму — нет, различиям — да! | ||
| + | {| class="wikitable" | ||
| + | |- | ||
| + | ! Таблицы !! Отношения | ||
| + | |- | ||
| + | | Столбцы – список || Атрибуты – множество | ||
| + | |- | ||
| + | | Строки – элемент расширенного декартова произведения || Кортежи – элемент декартова произведения | ||
| + | |- | ||
| + | | Таблица – список строк || Отношение – множество кортежей | ||
| + | |} | ||
== Ключи == | == Ключи == | ||
=== Надключи === | === Надключи === | ||
| + | |||
| + | ==== Определения ==== | ||
| + | |||
| + | {{Определение | ||
| + | |definition = | ||
| + | Пусть R — отношение. Будем говорить, что заданное множество атрибутов R обладает свойством '''уникальности''', если в любой конкретный момент времени никакие два кортежа в R не являются дубликатами друг друга. | ||
| + | }} | ||
| + | По определению, множество всех атрибутов R обладает свойством '''уникальности'''. | ||
| + | {{Определение | ||
| + | |definition = | ||
| + | Возьмем любое множество атрибутов отношения R, это множество является '''надключом''' для R тогда и только тогда, когда оно обладает одновременно двумя перечисленными ниже свойствами: | ||
| + | * Обладает свойством уникальности. | ||
| + | * В проекции на надключ нет повторяющихся кортежей. | ||
| + | }} | ||
| + | Как следствия приходим к следующему определению надключа: | ||
| + | {{Определение | ||
| + | |definition = | ||
| + | Надключ является '''идентификатором''' кортежа. | ||
| + | }} | ||
| + | |||
| + | ==== Пример ==== | ||
| + | |||
| + | {| class="wikitable" style="float:right; margin-left:0.8em; clear:right;" | ||
| + | |+ Пример таблицы с паспортными данными | ||
| + | |- | ||
| + | ! SId | ||
| + | ! PassS | ||
| + | ! PassNo | ||
| + | ! LastName | ||
| + | ! FirstName | ||
| + | |- | ||
| + | |1 | ||
| + | |0000 | ||
| + | |123456 | ||
| + | |Иванов | ||
| + | |Иван | ||
| + | |- | ||
| + | |2 | ||
| + | |0001 | ||
| + | |098765 | ||
| + | |Петров | ||
| + | |Петр | ||
| + | |- | ||
| + | |3 | ||
| + | |0001 | ||
| + | |654321 | ||
| + | |Сидоров | ||
| + | |Сидр | ||
| + | |- | ||
| + | |4 | ||
| + | |0007 | ||
| + | |567890 | ||
| + | |Плюшкин | ||
| + | |Иван | ||
| + | |} | ||
| + | |||
| + | Сколько надключей в таблице с паспортными данными? | ||
| + | |||
| + | Очевидно, что <tex>SId</tex> и <tex>\{PassS, PassNo\}</tex> сами по себя являются надключами. | ||
| + | Тогда рассмотрим все возможные множества, которые содержат любой из этих надключ: | ||
| + | * Все для <tex>SId</tex>: <tex>1+C_4^1+C_4^2+C_4^3+C_4^4= 16</tex> | ||
| + | * Все без <tex>SId</tex> для <tex>\{PassS, PassNo\}</tex>: <tex>1+C_2^1+C_2^2= 4</tex> | ||
| + | |||
| + | Итого: <tex>16 + 4 = 20</tex> | ||
| + | |||
=== Ключи === | === Ключи === | ||
| − | === | + | ==== Определения ==== |
| − | === | + | {{Определение |
| − | + | |definition = | |
| + | '''Ключ''' — минимальный по включению надключ. | ||
| + | }} | ||
| + | Учитывая то, что у любого множества атрибутов отношения R существует надключ в виде множества всех атрибутов R, то ключ всегда можно найти, минимизировав этот надключ. | ||
| + | |||
| + | Как следствия приходим к следующему определению: | ||
| + | {{Определение | ||
| + | |definition = | ||
| + | Ключ является '''минимальным идентификатором''' кортежа. | ||
| + | }} | ||
| + | |||
| + | Ключи для таблицы с паспортными данными: | ||
| + | * <tex>SId</tex> | ||
| + | * <tex>\{PassS, PassNo\}</tex> | ||
| − | == | + | ==== Требования к ключам ==== |
| − | === Определение | + | {{Определение |
| − | + | |definition = | |
| − | + | Пусть R — отношение. Будем говорить, что заданное множество атрибутов R обладает свойством '''неизменности''', если в любой конкретный момент времени никакое строгое подмножество множества атрибутов не обладает свойством уникальности. | |
| − | === | + | }} |
| − | + | Ключи должны удовлетворять следующим свойствам: | |
| − | + | * Уникальность | |
| − | + | * Неизменность | |
| − | + | ||
| − | + | ==== Естественные и суррогатные ключи ==== | |
| − | == | + | Различия суррогатных и натуральных ключей (виды ключей <ref>[http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85#.D0.9A.D0.BB.D1.8E.D1.87.D0.B8 Виды ключей — Викиконспекты]</ref>): |
| − | + | * Натуральные – соответствуют бизнес-правилам, часто составные | |
| + | * Суррогатные – простые и эффективные | ||
| + | |||
| + | == Примечания == | ||
| + | <references /> | ||
== Литература == | == Литература == | ||
| − | * Дейт К.: Введение в системы баз данных (Глава 9 | + | * ''Дейт К.'' : Введение в системы баз данных (Глава 9) |
| − | * Уидом Д., Ульман Д.: Основы реляционных баз данных (Глава 3) | + | * ''Уидом Д., Ульман Д.'' : Основы реляционных баз данных (Глава 3) |
| − | * W.W. Armstrong: [https://web.archive.org/web/20180126091352if_/https://ipfs.io/ipfs/QmWYWTGUZyTm2iRFTZY2pTr2x1vWkDiJr2CBp2PGVpSVSv Dependency Structures of Data Base Relationships] | + | * ''W.W. Armstrong'' : [https://web.archive.org/web/20180126091352if_/https://ipfs.io/ipfs/QmWYWTGUZyTm2iRFTZY2pTr2x1vWkDiJr2CBp2PGVpSVSv Dependency Structures of Data Base Relationships] |
| + | |||
| + | == Ссылки == | ||
| + | * [https://www.kgeorgiy.info/courses/dbms/lectures/fundeps.html Реляционная модель и функциональные зависимости — kgeorgiy] | ||
| + | * [https://en.wikipedia.org/wiki/Relational_model Relational model — Wikipedia] | ||
| + | |||
| + | [[Категория:Базы данных | ]] | ||
| + | [[Категория:{{BASEPAGENAME}}]] | ||
Текущая версия на 19:34, 4 сентября 2022
| Определение: |
| Реляционная модель данных — это модель данных, построенная на логике первого порядка [1], где все данные представлены в виде кортежей, связанных отношениями. |
Содержание
Отношение
Определение и пример
| Определение: |
Отношение — это кортеж с именем, состоящий из (Заголовок, Тело), где:
|
Заданное отношение соответствует тому, что мы называли расширением предиката [2] в логике первого порядка.
Пример отношения
{id: int, name: string}
{{id: 10, name: Иванов},
{id: 20}}
Отношения и математика
Отношения и таблицы
Изоморфизму — нет, различиям — да!
| Таблицы | Отношения |
|---|---|
| Столбцы – список | Атрибуты – множество |
| Строки – элемент расширенного декартова произведения | Кортежи – элемент декартова произведения |
| Таблица – список строк | Отношение – множество кортежей |
Ключи
Надключи
Определения
| Определение: |
| Пусть R — отношение. Будем говорить, что заданное множество атрибутов R обладает свойством уникальности, если в любой конкретный момент времени никакие два кортежа в R не являются дубликатами друг друга. |
По определению, множество всех атрибутов R обладает свойством уникальности.
| Определение: |
Возьмем любое множество атрибутов отношения R, это множество является надключом для R тогда и только тогда, когда оно обладает одновременно двумя перечисленными ниже свойствами:
|
Как следствия приходим к следующему определению надключа:
| Определение: |
| Надключ является идентификатором кортежа. |
Пример
| SId | PassS | PassNo | LastName | FirstName |
|---|---|---|---|---|
| 1 | 0000 | 123456 | Иванов | Иван |
| 2 | 0001 | 098765 | Петров | Петр |
| 3 | 0001 | 654321 | Сидоров | Сидр |
| 4 | 0007 | 567890 | Плюшкин | Иван |
Сколько надключей в таблице с паспортными данными?
Очевидно, что и сами по себя являются надключами. Тогда рассмотрим все возможные множества, которые содержат любой из этих надключ:
- Все для :
- Все без для :
Итого:
Ключи
Определения
| Определение: |
| Ключ — минимальный по включению надключ. |
Учитывая то, что у любого множества атрибутов отношения R существует надключ в виде множества всех атрибутов R, то ключ всегда можно найти, минимизировав этот надключ.
Как следствия приходим к следующему определению:
| Определение: |
| Ключ является минимальным идентификатором кортежа. |
Ключи для таблицы с паспортными данными:
Требования к ключам
| Определение: |
| Пусть R — отношение. Будем говорить, что заданное множество атрибутов R обладает свойством неизменности, если в любой конкретный момент времени никакое строгое подмножество множества атрибутов не обладает свойством уникальности. |
Ключи должны удовлетворять следующим свойствам:
- Уникальность
- Неизменность
Естественные и суррогатные ключи
Различия суррогатных и натуральных ключей (виды ключей [3]):
- Натуральные – соответствуют бизнес-правилам, часто составные
- Суррогатные – простые и эффективные
Примечания
Литература
- Дейт К. : Введение в системы баз данных (Глава 9)
- Уидом Д., Ульман Д. : Основы реляционных баз данных (Глава 3)
- W.W. Armstrong : Dependency Structures of Data Base Relationships