* ДП – Декартово произведение
Домейн (data domain) – множество от всички допустими, а не текущо налични стойности, което дадена колона може да приема. Условно казано, домените са на ниво ДП. Те са на практика отделните множества, от които се образува да даденото ДП, от което е част дадената релация. Домейн на градовете, домейн на хората, домен на рождените дати…
Когато говорим за релация, домейнът е все едно даденият атрибут, а когато говорим за таблица – все едно колоната.
Each of these domains is, in effect, a pool of values, some or all of which may be represented in the data bank at any instant.
We shall call the set of values represented at some instant the active domain at that instant.
Домейн може да е например възможните стойности като при ENUM полетата – чисто изброени стойност.
Може да е типът на полети + евнтуално някакъв constraint, например varchar(100). Toест, казваме, „в тази колона всички възможни стойности са стрингове и не по-дълги от 100 символа, това е домейнът на това поле.
Домейнът на поле Заплата e например „всички положителни числа от 0 до 100 000 лв.“.
Ограниченията (constraints) позволяват в още по-голяма степен да се специфицират стойностите, които атрибутите от даден домейн могат да приемат.
–––––––––––––––––––––––––––––––––––––––-
Декартовото произведение (ДП) не притежава свойството комутативност, тоест ако разменим местата на участващите операнди, резултатът ще е различен.
S1 x S2 ≠ S2 x S1
Също, не притежава и асоциативност – тоес ако имаме ДП на 3 и повече множества и един път ги групираме по един начин, дръг път по друг, ще получим различни резултати.
(S1 x S2) x S3 ≠ (S1 x S3) x S2
Комутативност – поредността на операндите няма значение, напр. при умножение, събиране, но не и изваждане и деление.
5 x 6 = 6 x 5
Асоциативност – как групираме операндите на операцията. Напр. при умножение няма значение
(5 x 6) x 7 = (7 x 5) x 6
При множествата асоциативна операция е дизюнкция („обединение“, „OR“)
S1 ∨ S2 = S2 ∨ S1
Също конюнкция („сечение“, „AND“)
S1 ∧ S2 = S2 ∧ S1
Но не и разлика – резултантно множество, чиито елементи са елементи на S1, но не са елементи на S2
Aко един множител от ДП е празно множество, полученото ДП е празно множество.
S1 x Ф = Ф
Що е то релация има ли тя почва у нас?
Вземаме например две множества S1 и S2, като S1 ще съдържа населени места, S2 – хора. Правим ДП от двете множества и получаваме всички възможни комбинации от хора и населени места. Но на практика само по една от комбинациите за човек ще са носещи информация и са истинни, защото човек може да е роден само в едно населено място. Това е релация – тази част от ДП, това подмножество от ДП, което показва реалните отношения между ЧОВЕК и НАСЕЛЕНО МЯСТО, и което носи инфомация.
Релацията между множествата (Иван, Стоян, Петър….) и (Русе, Варна, София…) е само тази част от ДП, която показва наистина кой къде е роден. Затова се казва „релация“ (отношение), защото показва отнешията между отделните елементи на двете множества – отножението между Иван и София, Петър и Русе,… и т.н.
Казва се релация, защото отразява връзките между отделните елементи в отделните множества. „Иван“ от множество „Хора“ е роден в „Каспичан“ от множеството „Населени места“ и на „1978-11-12“ от множество „Дата на раждане“… Така се отразява връзката между „Иван“, „Каспичан“, „1978-11-12″… Връзката, /релацията/ между тези три или повече конкретни елемента в отделните 3 или повече множества. Иван е роден конкретно в Каспичан и конкретно на тази дата…
Това се има предвид под „релация“ – отношението между какво? Между ОТДЕЛНИТЕ ЕЛЕМЕНТИ на множествата, не между множествата като цяло. За второто си има сечения, обединение, разлика…
Разликата с ДП е, че там Иван щеше да е роден във всички „Нас. места“ и на всички налични дати от „DOB“.
A relation is nothing but a table of values. Every row in the table represents a collection of related data values. These rows in the table denote a real-world entity or relationship.
Една релация е множество, принадлежащо на ДП на участващите множества:
R ⊆ S1 x S2 x …. Sn;
Relations of degree 1 are often called unary, degree 2 – binary, degree 3 – ternary, and degree n – n-ary.
Всеки стълб от табличното представяне на релацията, която има уникално име, се нарича атрибут на релацията:
R = (A1, A2, …. An);
Разликата между релация и таблица е, че когато релацията има име и набор от атрибути, отношенияте между които биват истинни, и всеки атрибут има уникално име, тогава вече можем да представим релацията в табличен вид и тогава имаме таблица. Релацията е по-скоро математически термин, който когато се „превъплъти“ в табличен вид, се нарича таблица.
Aко се замислим, всичко около нас множество от безкрайно много вероятни възможности, но се е случила само тази, в която сме.
Базова релация – тези релации, в които се съхраняват данните, а не се получават чрез различни операции като обединение и т.н… По-просто казано, това е самата таблица, а не разултатът от например SELECT операция.
Производни релации – такива релации, които не съхраняват данни, а се получават чрез прилагане на операции над други релации.
Схема на релация – името и и множеството от атрибутите и – R(A1, A2….An)
Ключ на релация – множество от атрибути, явяващо се подмножество от всички атрибути на релацията
К = (A1, A3, A58… Am) ⊆ (A1, A2, A3… An)
за които няма два или повече кортежа t, в които всички тези атрибути са еднакви.
t1(K) ≠ t2(K) ≠ … tn(K)
Първичен ключ на релация – понякога една релация може да има повече от един ключа, тогава решаваме и приемаме един от тях за първичен. На практика, почти винаги се добавя допълнителен атрибут на име ID, който изкуствено да служи за първичен ключ.
Първичен ключ (primary key) е атрибут (по-рядко група атрибути), който служи да идентифицира по уникален начин всеки запис (екземпляр) на релацията. Когато измежду атрибутите на релацията няма един подходящ за първичен ключ атрибут, вариантите са:
– да се прибегне към множество от два и повече атрибути, които заедно идентифицират записите еднозначно, т.нар. сложен първичен ключ (composite primary key), или
– да се добави нов атрибут, по който да се прави идентификацията на записите.
Чужд (външен) ключ на релация – ключ на дадената релация, който не е Първичен ключ за своята релация но е Първичен ключ за друга релация. Така на практика се реализира логическа свързаност между информацията на двете релации. Външният ключ (foreign key) е необходим, когато налице е отношение между две таблици (релации). Отношението се създава, като копие от първичния ключ на едната таблица се включи в структурата на втората таблица, за която той е външен (понеже тя вече си има свой собствен първичен ключ). Освен да помогне в установяването на отношение между двете таблици, външният ключ помага да се осигури и интегритета (целостта) на ниво отношение.
Текущ екземпляр на релация – релациите са динамични, във всеки момент всяка релация е набор от определени кортежи. „Моментната снимка“ от този набор от кортежи е текущият екземпляр на релацията.
Проекция – унарна операция, която на релация съпоставя нова, в която участват същите кортежи като в началната, но без определени атрибути (колони).
П A1,A3(R(A1,A2,A3)) = R(A1, A3)
Relation universe – релациите с един и същ header.
Relation header – наборът от именованите атрибути на дадена релация, като за всеки атрибут имаме и типа му. Тоест – двойки от име и тип за всяка колона. Отговаря на схемата на таблицата. Аналогията с ООП би била, че хедъра е класът, а бодито е масив от обекти от този клас.
Relation degree – броят двойки (име – тип) в хедъра на дадената релация.
Relation cardinality – броят кортежи в дадената релация.
Relation body – time-varying set of tuples, tied to the header.
A relation R can be considered as a variable.
The heading of a relation is the „type“ of the variable R
The type of R is (D1, D2, D3, … Dn)
The body of a relation is the „value“ of the variable R
The value of R is a subset of the Cartesian Product of D1, D2, …, Dn
Свойства на релацията:
There are no duplicate tuples.
Tuples are unordered.
Attributes are unordered.
All attribute values are atomic.
Difference between Tuple Relational Calculus (TRC) and Domain Relational Calculus (DRC) – при първото имаме резултат цели кортежи, при второто – проекция на избраните кортежи, съдържаща само някои атрибути. По-просто казано, едното селектва цели редове, другото само определени полета от намерените редове. Двете заедно съставят т.н. Relational calculus.
TRC имаме когато нямаме Проекция, a само Селекция, тоест трябват ни всички атрибути на кортежа, целият кортеж.
{t | t ∈ Employee ^ t[Salary] > 5000}
Чете се така: имаме кортеж(и) t, такива че принадлежат на релацията Employee и атрибутът им Salary е по-голям от 5000
TRC имаме когато имаме и Проекция, и Селекция
{<f,s,a>|<f,l,s,b,a> Employee ^ Salary > 50000}
Литература:
http://fmi.wikidot.com/db#toc0
http://konkursi-as.tu-sofia.bg/doks/SF_FKSU/ns/64/avtoreferat.pdf
https://en.wikipedia.org/wiki/Relational_model
http://people.cs.pitt.edu/~chang/156/outline.htm
http://diranieh.com/Database/RelationalDatabaseModel.htm
https://www.guru99.com/relational-data-model-dbms.html
https://opentextbc.ca/dbdesign01/chapter/chapter-7-the-relational-data-model/