Instrumentele software pentru lucrul cu bazele de date relaționale, spre deosebire de multe altele, se bazează pe o teorie relativ strictă a relațiilor, care la rândul ei se bazează pe teoria seturilor. Pentru a înțelege esența sarcinii de creare a unei baze de date relaționale, precum și a operațiilor pe date, este suficient să luăm în considerare la nivelul teoretic (abstract) doar câteva prevederi fundamentale ale teoriei relațiilor. Este mai rapid și, în cele din urmă, mai bine, mi se pare, decât să studiez un număr mare de exemple și situații concrete.
Tabelele care formează o bază de date relațională sunt câteva relații, iar relațiile nu sunt altceva decât seturi. Toate interogările către baza de date, destinate extragerii înregistrărilor necesare din aceasta, sunt interpretate ca instrucțiuni pentru efectuarea anumitor operații, care în cele din urmă sunt operații de algebră a seturilor și calculul predicatelor.
În acest capitol, vom analiza problemele de bază legate de bazele de date relaționale, dintr-un punct de vedere posibil mai general. Dar toate capitolele ulterioare vor fi dedicate metodelor specifice de utilizare a limbajului SQL.
Un set este un concept atât de general încât nu are o definiție care să poată fi exprimată în concepte și mai generale și mai simple. Prin urmare, în teoria matematică a seturilor, definiția (în sensul matematic) al conceptului de set este absentă. Cu toate acestea, se bazează pe o anumită imagine care Georg Cantor (unul dintre fondatorii teoriei set) descris ca o colecție de specifice și diferite între ele obiecte de intuiție sau inteligență conceput integral. Aceste obiecte se numesc elemente setate.
Esențială pentru înțelegerea lui Cantor a setului este că colecția de obiecte este considerată ca un singur obiect. Natura obiectelor care pot intra în set nu este supusă nici unei restricții. Pot fi numere, seturi de caractere, oameni, atomi și așa mai departe.
Seturile pot fi finite și infinite. Seturile finite conțin elemente care pot fi numărate sau enumerate. Aceasta înseamnă, în primul rând, că există o oportunitate fundamentală de a aloca fiecărui element al setului un anumit număr natural (1, 2, 3) și, în al doilea rând, această recalculare se va sfârși vreodată. De exemplu, un set infinit de toate numere întregi, puteți începe să lista, dar procesul nu se termină niciodată: pentru orice număr întreg, puteți crea următoarele, adăugând un 1. Dar mulțimea tuturor numerelor reale, și sunt infinite, chiar încep să enumăr posibile. Este interesant faptul că acest fapt a fost stabilit de Kantor abia la sfârșitul secolului al XIX-lea și a făcut o impresie uimitoare pe matematicieni.
Există, de asemenea, seturi finite, ale căror elemente nu pot fi enumerate. Vă atrag atenția asupra cuvântului "practic". Reprezentativ pentru astfel de seturi pot fi, de exemplu, mulțimea tuturor celor uciși în Bătălia de la Kulikov, precum și un set de toate secvențele posibile de zerouri și cele de lungime 100. Noi credem că aceste seturi sunt finite. Numărul de decese nu poate fi infinit, dar nici nu știm cum să le menționăm, fie soluția acestei sarcini necesită costuri incredibil de mari ale resurselor. Numărul de secvențe de unu și zero de lungime egală cu 2 100 100. Acest număr este mai mare decât numărul de atomi din părțile vizibile ale universului și, prin urmare, nu este suficient de viață multe generații pentru enumerăm (sau generează) astfel de secvențe, chiar cu computerul foarte mare viteză. Cu toate acestea, în matematică, imposibilitatea practică și teoretică a ceva este altceva. Dificultățile practice sunt ignorate de matematicieni și dezvăluirea neîndeplinirii fundamentale (limitelor fundamentale) a ceva este extrem de valoroasă pentru ei. Teoria matematică a mulțimilor este acum considerată ca temelie a tuturor matematicii și, de asemenea, ca un spațiu și mijloc de a studia infinitul. Este foarte interesant, dar această carte nu este despre asta.
În practica calculatoarelor și, în special, în bazele de date, avem de-a face cu seturi finite, deși uneori foarte mari. Prin urmare, suntem imuni față de incertitudinile și blocurile logice care pot apărea în domeniul seturilor infinite. Cu toate acestea, trebuie să depășim dificultățile practice asociate cu seturi finite foarte mari, dar aceasta este o problemă mai degrabă de tehnologie decât de matematică. Acum, să ne întoarcem la aspectele formale ale seturilor finite pentru a ne imagina pe scurt ce avem de-a face într-o mare varietate de particularități din viață.
Deci, setul este că are elemente, iar elementele sunt ceva ce intră sau nu aparține unui set dat. Nu pot exista două sau mai multe elemente identice într-un set, iar ordinea dispunerii elementelor în set nu contează. Rețineți că aceste seturi sunt diferite de arrays - obiecte de limbi de programare și programe de calculator. Arrays în programe sunt comandate cumva și pot conține aceleași elemente. În același timp, nimic nu împiedică considerarea matricelor ca model (aproximație) a seturilor. Este important să ne amintim că o matrice este un fel de întrupare software a ideii unui set finit, care are proprietăți suplimentare care nu trebuie să aibă multe.
Indicăm un set de simbolul A. și toate elementele care intră în acest set sunt simboluri. Apoi notația înseamnă că setul A conține numai acele elemente. care sunt indicate în paranteze curbate. Vă reamintesc că toate elementele sunt diferite, iar ordinea lor de indicare în paranteze curbate nu contează.
Un element x poate sau nu poate face parte din setul A. Pentru a indica faptul că elementul x aparține setului A. scrie. și dacă x nu face parte din A. scrie apoi. Un set nu poate conține elemente, atunci se numește gol și este notat ca Æ .
Cea mai simplă modalitate de a determina un anumit set este să indicați în mod explicit toate elementele aparținând acestui set. Aceasta este așa-numita metodă extensivă de determinare a unui set. Dacă numărul de elemente care intră în setul A. nu este mare, atunci este destul de aplicabil în practică: este suficient să se scrie o expresie a formularului. Cu toate acestea, pentru seturile suficient de mari, această metodă nu este adecvată. Apoi folosiți așa-numitul mod intensional (implicit) de definire a seturilor. Se bazează pe utilizarea unei anumite funcții (algoritm), care pentru fiecare element determină dacă aparține unui set dat sau nu. Să presupunem că pentru un anumit set A este definită o astfel de funcție. Dacă în loc de o variabilă x substituie în expresia ei un element specific a. rezultatul calculului este TRUE (adevărat) sau FALSE (fals), în funcție de faptul dacă sau nu este deținută de o multitudine de elemente A. Astfel, funcția are ca argumente elementele unei anumite regiuni (universul) și returnează una dintre cele două valori , pe care aici îl denumim TRUE și FALSE (adică funcția are două valori). Pe de altă parte, putem defini într-un fel o funcție de două valori. care ia ca valori de argument dintr-un anumit univers. Apoi, această funcție definește un anumit set, și anume setul tuturor acelor elemente ale universului pentru care această funcție returnează TRUE. Aceste două funcții în logica matematică se numesc predicate.
Ca exemplu, luați în considerare expresia. Aceasta este o expresie tipică de comparație. Aici, x reprezintă o variabilă ale cărei valori sunt luate din mulțimea tuturor numerelor reale. Apoi, această expresie poate fi TRUE sau FALSE, în funcție de ce valoare se înlocuiește cu x. Contrar practicii matematice stabilite, am putea scrie această expresie în această formă :. Aici este denumirea predicatului "să fie mai mică de 5". Acest predicat definește mulțimea tuturor numerelor reale care sunt mai mici de 5. Observați că am definit un set infinit într-un mod finit.
În mod similar, putem defini prin predicat setul tuturor elementelor roșii. Desigur, trebuie să avem un algoritm pentru calculul acestui predicat, adică un algoritm pentru a determina dacă elementul prezentat x este roșu sau nu.
Într-o formă explicită (extensivă), un set gol este notat cu <>. Un set inerțial gol este definit printr-un predicat care este fals pentru toate elementele universului.
Predictive în logica matematică sunt funcții de două valori. Cu toate acestea, atât în matematică, cât și în practică, există adesea situații în care o logică multiplă și, în special, de trei valori este mai potrivită. Astfel, pentru un element x, rezultatul calculării valorilor unui predicat P (x) poate fi nu numai TRUE sau FALSE, ci și oa treia valoare, de exemplu, NULL. Acesta din urmă este interpretat ca "nedefinit" sau "necunoscut". O astfel de logică este acceptată într-o formă sau alta, cu suportul unor baze de date moderne. De exemplu, o coloană dintr-o tabelă de baze de date poate conține o valoare specială NULL în plus față de orice set de caractere. care este înțeles ca "încă neintrodus", "încă necunoscut", etc. Cu toate acestea, observ că înțelegerea logicii cu trei valori este mai bine asimilată sub condiția înțelegerii logicii clasice cu două valori.
Între seturi, raportul de incluziune este determinat. Astfel, setul A inclus în setul B (această afirmație este scrisă ca) în cazul în care fiecare membru al setului și setul A aparține B. În acest caz, spunem că mulțimea A este un subset al setului B. Cele două seturi sunt egale (), și în cazul în care. adică ambele seturi sunt incluse unul în celălalt și, prin urmare, constau în aceleași elemente. Este evident că orice set este subsetul său propriu, adică pentru orice set A relația este valabilă. Cu toate acestea, în general, din asta. încă nu urmează acest lucru. Set gol Æ este inclus în orice set, adică pentru orice set A există o includere. Acest fapt, deși este evident, poate fi dovedit. De fapt, să spunem că este falsă. Dar acest lucru ar putea fi doar dacă există un element x astfel încât și. Cu toate acestea, acest lucru nu este posibil, deoarece un set gol Æ nu are elemente prin definiție.
Nu trebuie să confundăm relația apartenenței dintre elemente și seturi și relația incluziunii dintre seturi. Deci, de exemplu, dacă și. atunci asta nu înseamnă asta. Un alt exemplu: dacă și. atunci. dar nu este adevărat acest lucru. Este adevărat numai acest lucru. adică, setul constând din elementul B este un subset al mulțimii A. Cu alte cuvinte, elementele unui anumit set A pot fi seturi, însă elementele acestora nu sunt neapărat elemente ale setului A. Deci, în exemplul considerat. . . dar. Rețineți, de asemenea, că un element și un set care conține numai acest element (adică, x și) sunt lucruri diferite.
Deasupra mulțimilor, puteți efectua diverse operații: join (), intersecție (), scădere (-) și produs cartezian (').
Unirea seturilor A și B este un set, denumit ca. care conține toate elementele setului A și toate elementele setului B. De exemplu, permiteți. . Apoi. Îmi amintesc că în orice set toate elementele trebuie să fie diferite. Cu alte cuvinte, setul conține numai acele elemente care aparțin setului A sau setului B (eventual ambele). În special ,.
Intersecția seturilor A și B este un set marcat cu. care conține toate elementele care aparțin setului A. Și setului B. Dacă nu există astfel de elemente, atunci intersecția seturilor este goală (). De exemplu, permiteți-vă. . Apoi. În special ,.
Scăderea din mulțimea A a setului B dă ca rezultat un set, numit diferența dintre aceste seturi și notat cu. Acest set conține toate elementele setului A. Care nu aparțin setului B. De exemplu, permiteți. . Apoi. În special ,. Dacă seturile A și B nu se intersectează (adică,) atunci. Setul este de asemenea numit complementul setului B până la setul A.
Produsul cartezian al seturilor va fi considerat mai târziu în Sec. 1.2.
Semnăm prin I mulțimea tuturor elementelor, care se numește univers. Se presupune că orice element cu care ne confruntăm aparține universului. Apoi orice set A este un subset al universului :. O diferență se numește complementul unui set A unui univers (sau pur și simplu un complement) și este notat cu.
În literatura matematică, "" este adesea folosit pentru a desemna funcționarea seturilor de scădere.
Următoarele sunt ecuațiile de bază folosite la conversia expresiilor cu mai multe operații pe seturi:
q este legea complementului dublu (negație);
q - legea excluderii celui de-al treilea;
q este legea contradicției;