Càlcul relacional basat en tuplas
El càlcul relacional basat en tuplas és un càlcul introduït per Edgar Frank Codd com a part del càlcul relacional, el qual pertany al model relacional per a bases de senyes. Va ser l'inspiració per a la creació dels llenguages de consulta QUEL i SQL, dels quals este últim, encara que menys fidel a l'original, és ara el llenguage de consulta més usat. El càlcul relacional basat en domini, formulat per Michel Lacroix and Alain Pirotte, s'aproxima més a la llògica de primer orde, no obstant abdós són equivalents en el seu poder expressiu.
Definició
[editar | editar còdic]Base de senyes relacional
[editar | editar còdic]Degut a que és un llenguage de consulta per a bases de senyes relacionals, primer es deu definir una base de senyes relacional. El bloc de construcció relacional bàsic és el domini o tipo de senyes. Una tupla o registre és un multiconjunto d'atributs, els quals són parells ordenats de domini i valor, o només una fila. Una relació és un conjunt de tuplas. Una taula és una representació visual acceptada d'una relació.
S'assumix l'existència d'un conjunt C de columnes, per eixemple, "nom", "autor" o "direcció"; i de capçaleres com a subconjunts finitos de C. Un esquema de bases de senyes relacional és definit com una tupla S = (D, R, h), a on:
- D és el domini dels valors atòmics (un atribut és atòmic si els elements del domini són simples i indivisibles).
- R és un conjunt finito de noms de relació.
- h és una funció que associa una capçalera en cada nom de relació en R i es definix com: h: R → 2C
Donat un domini D es definix una tupla sobre D com una funció parcial que mapea alguns noms de columna a un valor atòmic en D; per eixemple, name: "Harry", age : 25.
- t : C → D
El conjunt de totes les tuplas sobre D es denota com a TD. El subconjunt de C per al qual es definix una tupla t es coneix com el domini de t (que no deu confondre's en el domini en l'esquema) i és escrit com dom(t).
Llavors es pot definir una base de senyes relacional donat un esquema S = (D, R, h) com una funció:
- db : R → 2TD
que mapea els noms de relació en R a subconjunts finitos de TD, tals que per cada nom de relació r en R i tupla t en db(r) es complix que:
- dom(t) = h(r).
És dir, que totes les tuplas d'una relació deuen contindre els mateixos noms de columna que es definixen per a l'esquema.
Àtoms
[editar | editar còdic]Per a la construcció de les fòrmules s'assumix un conjunt infinit V de variables de tupla. Les fòrmules es definixen donat un esquema de bases de senyes S = (D, R, h) i una funció parcial tipo : V -> 2C que definix una assignació de tipo que assigna capçaleres a algunes variables de tupla. Llavors es definixen el conjunt de fòrmules atòmiques A[S,tipo] en les següents regles:
- Si v i w estan en V, a en tipo(v) i b en tipo(w) llavors la fòrmula "v.a = w.b" està en A[S,tipo].
- Si v està en V, a en tipo(v) i k denota un valor en D llavors la fòrmula "v.a = k" està en A[S,tipo].
- Si v està en V, r en R i tipo(v) = h(r) llavors la fòrmula "r(v)" està en A[S,tipo].
Eixemples d'àtoms són:
- (t.edat = s.edat) — la tupla t té un atribut d'edat i s té un atribut d'edat en el mateix valor
- (t.nom = "Codd") — la tupla t té un atribut de nom i el seu valor és "Codd"
- Llibre(t) — la tupla t es troba en la relació Lliure.
La semàntica formal d'aquells àtoms és definida donada una base de senyes db sobre S i una variable de tupla val : V -> TD que mapea les variables de tupla a tuplas sobre el domini en S:
- "v.a = w.b" és verdader si i només si val(v)(a) = val(w)(b)
- "v.a = k" és verdader si i només si val(v)(a) = k
- "r(v)" és verdader si i només si val(v) is in db(r)
Fòrmules
[editar | editar còdic]Els àtoms poden ser combinats en fòrmules, com és comuna en la llògica de primer orde, en els operadors llògics ∧ (and o i), ∨ (or o o) i ¬ (not o no), i pot usar-se el quantificador existencial (∃) i el quantificador universal (∀) per a enllaçar o unir les variables. Es definix el conjunt de fòrmules F[S,tipo] per inducció en les següents regles:
- Cada àtom en A[S,tipo] està també en F[S,tipo].
- Si f1 i f2 estan en F[S,tipo] llavors la fòrmula "f1 ∧ f2" està també en F[S,tipo].
- Si f1 i f2 està en F[S,tipo] llavors la fòrmula "f1 ∨ f2" està també en F[S,tipo].
- Si f està en F[S,tipo] llavors la fòrmula "¬ f" està també en F[S,tipo].
- Si v està en V, una capçalera H i una fòrmula f en F[S,tipo[v->H]] llavors la fòrmula "∃ v: H (f)" està també en F[S,tipo], a on tipo[v->H] denota la funció que és igual a tipo excepto que esta mapea v a H.
- Si v està en V, una capçalera H i una fòrmula f en F[S,tipo[v->H]] llavors la fòrmula "∀ v: H (f)" està també en F[S,tipo].
Eixemples de fòrmules són:
- t.autor = "René Descartes" ∨ t.autor = "Óscar Gómez"
- Llibre(t) ∨ Revista(t)
- ∀ t : {autor, títul, matèria} ( ¬ ( Llibre(t) ∧ t.autor = "René Descartes" ∧ ¬ ( t.matèria = "revolució científica")))
Assumim que els quantificadors s'apliquen sobre l'univers de totes les tuplas sobre el domini en l'esquema. Açò du a la formulació de les següents semàntiques per a fòrmules donada una base de senyes db sobreS i una variable de tupla val: V -> TD:
- "f1 ∧ f2" és verdader si i solament si "f1" és verdader i "f2" és verdader.
- "f1 ∨ f2" és verdader si i solament si "f1" és verdader o "f2" és verdader o abdós són verdaders.
- "¬ f" és verdader si i solament si "f" és fals.
- "∃ v : H ( f )" és verdader si i solament si hi ha una tupla t sobre D tal que dom(t) = H i la fòrmula "f" és verdadera per a val[v->t].
- "∀ v : H ( f )" és verdader si i solament si para totes les tuplas t sobre D tals que dom(t) = H la fòrmula "f" és verdadera per a val[v->t].
Consultes
[editar | editar còdic]Donat un esquema S = (D, R, h), s'expressa una consulta com:
- { v : H | f(v) }
A on v és una variable de tupla, H és una capçalera i f(v) una fòrmula en F[S,tipo] a on tipo = { (v, H) } i en v com la seua única variable lliure. El resultat d'una consulta com estes per a una base de senyes db sobre S és el conjunt de totes les tuplas t sobre D en dom(t) = H tals que f és verdader per a db i val = { (v, t) }.
Eixemples de consultes són:
- { t : {nomene} | ∃ s : {nom, salari} ( Empleat(s) ∧ s.salari = 500.000 ∧ t.nomene = s.nom ) }
- { t : {proveïdor, artícul} | ∃ s : {s#, snombre} ( Proveïdor(s) ∧ s.snombre = t.proveïdor ∧ ∃ p : {p#, pnombre} ( Producte(p) ∧ p.pnombre = t.artícul ∧ ∃ a : {s#, p#} ( Suministraments(a) ∧ s.s# = a.s# ∧ a.p# = p.p# ) }
Semàntica i restricció sintàctica
[editar | editar còdic]Consultes independent del domini
[editar | editar còdic]Degut a que la semàntica dels quantificadors és tal que ells quantifiquen sobre totes les tuplas en el domini de l'esquema, pot ser que una consulta retorne un resultat diferent per a una base de senyes específica si es presumix un atre esquema. Per eixemple, considerant els dos esquemes S1 = ( D1, R, h ) i S2 = ( D2, R, h ) en dominis D1 = { 1 }, D2 = { 1, 2 }, noms de relació R = { "r1" } i capçaleres h = { ("r1", {"a"}) }. Abdós esquemes tenen una instància comuna:
- db = { ( "r1", { ("a", 1) } ) }
Si considerem la següent consulta:
- { t : {a} | t.a = t.a }
Llavors el seu resultat en db o és { (a : 1) } baix S1 o { (a : 1), (a : 2) } baix S2. És clar també que si prenem el domini com un conjunt infinit, llavors el resultat de la consulta serà infinit. Per a resoldre eixos problemes es consideren les consultes independent del domini, aquelles que retornen el mateix resultat per a una base de senyes baix tots els seus esquemes.
Consultes segures
[editar | editar còdic]En la finalitat de llimitar les consultes de manera que expressen únicament consultes independent del domini, una noció sintàctica de consulta segura és introduïda. Per a determinar si una consulta és segura is safe es deriven dos tipos d'informació d'una consulta. La primera és si un parell columna-variablet.a està acotat a la columna d'una relació o una constant, i la segona és si hi ha dos pares columna-variable que són directa o indirectament equivalents (denotat t.v == s.w).
Per derivar el acotamiento s'introduïxen les següents regles:
- en "v.a = w.b" cap parell columna-variable està acotat,
- en "v.a = k" el parell columna-variable v.a està acotat,
- en "r(v)" tots els pares v.a estan acotats per a en tipo(v),
- en "f1 ∧ f2" tots els parells estan acotats de manera que estan acotats o en f1 o en f2,
- en "f1 ∨ f2" tots els parells estan acotats de manera que estan acotats abdós en f1 i en f2,
- en "¬ f" cap dels parells està acotat,
- en "∃ v: H (f)" un parell w.a està acotat si està acotat en f i w <> v,
- en "∀ v: H (f)" un parell w.a està acotat si està acotat en f i w <> v.
Per derivar l'equivalència s'introduïxen les següents regles:
- en "v.a = w.b" es manté que v.a == w.b,
- en "v.a = k" cap dels parells són equivalents,
- en "r(v)" cap dels parells són equivalents,
- en "f1 ∧ f2" es manté que v.a == w.b si es manté o en f1 o en f2,
- en "f1 ∨ f2" es manté que v.a == w.b si es manté en f1 i en f2,
- en "¬ f" cap dels parells són equivalents,
- en "∃ v : H ( f )" es manté que w.a == x.b si es manté en f i w<>v i x<>v,
- en "∀ v : H ( f )" es manté que w.a == x.b si es manté en f i w<>v i x<>v.
Llavors es diu que una consulta { v : H | f(v) } és segura si:
- per a cada nom de columna a en H podem derivar que v.a és equivalent a un parell acotat en f,
- per a cada subexpresión de f de la forma "∀ w : G (g)" podem derivar que per a cada nom de columna a en G podem derivar que w.a és equivalent a un parell acotat en g,
- per a cada subexpresión de f de la forma "∃ w : G (g)" podem derivar que per a cada nom de columna a en G podem derivar que w.a és equivalent a un parell acotat en g.
Sistemes
[editar | editar còdic]Bibliografia
[editar | editar còdic]- Edgar Frank Codd: A Relational Model of Data for Large Shared Data Banks. Communications of the ACM, 13(6):377–387, 1970.
Referències
[editar | editar còdic]- Este artícul conté una traducció derivada de «Cálculo relacional basado en tuplas» de Wikipedia en castellà publicada baix la Llicència de documentació lliure de GNU i la Llicència Creative Commons Reconeiximent-CompartirIgual 4.0 Internacional.