2021-02-26

Rakkaasta relaatiotietokannastani

Kun puhumme relaatiotietokantateoriasta, esittely yleensä lähtee "update anomalyista", sitten riippuvuuslogiikasta, ja noiden kautta normaalimuotojen teoriasta, aina viidenteen normaalimuotoon (kanonisesti PJ/NF, project join normal form, vaikka niitä oikeastaan on kolme erilaista).

Mutta mitä tää oikeesti on? Hyvää kombinatoriikkaa, alhaalta ylöspäin toki, mutta mikä se top-down -lintuperspektiivi olisi? Se joka meitä kaikkia kunnon harjoittajia vähän vaivaa, kun se ei oikein hahmotu.

Väittäisin intuitiostani, että se oikea tapa hahmottaa ongelma väkisinkin on kategoriateoreettinen, ja liittyy jotenkin relaatioalgebralle olennaisten operaattorien perusluonteeseen. Tarkemmin, tällä on selvästikin jotain tekemistä sen kanssa kuinka paljon me keskitymme nimenomaan liitokseen (join) operaattorina, ja normaalimuotoihin tapoina hajottaa tietokannan taulut pienemmiksi, niin että ne edelleen saadaan jossain mielessä minimaalisesti takaisin kasaan käyttämällä tuota liitosoperaattoria niiden välillä.

Eli pelin henki pohjimmiltaan on tietyn produktiivisen operaattorin minimaalinen dekompositio, modulo jotain, riippuvuusteoriasta. Se tiedetään jo, ettei tuo liitosoperaattorin kohdalla voi olla yksikäsitteinen, eli että edes simppelein funktionaalisen riippuvuuden teoria ei yleisesti ottaen salli konfluenttia uudelleenkirjoitusjärjestelmää; se ei salli yksiselitteistä normaalimuotoa, joka määräisi "yhden ainoan oikean" tietokannan rakenteen. "There can be only many, but also only so many." Ja näin on vielä jopa siinä klassisessa raamissa, joka johtaa kolmanteen normaalimuotoon, vain yhden tietokantataulun dekompositiossa, sen yhden tärkeäksi oletetun liitosoperaattorin alla. Tuo ei esim. pysty edes koskettamaan 3,3-normaalimuotoon, tietokantojen yleisesti ja tarpeellisesti toteuttamaan inkluusioriippuvuuteen taulujen välillä, eikä varsinkaan mihinkään millä on tekemistä sen toisen pääoperaattorin eli unionin kanssa.

Minun ajatukseni sitten on, että tätä käsittelyä pitäisi laajentaa huomattavasti jotta siihen tulisi mitään kokonaisjärkeä. Oikea raami minusta olisi löytää se täsmällinen kategoria jossa nuo taulut ja niille relevantit operaattorit (lähinnä union, join) elävät, ja kysyä millaiset dekompositiot siinä kategoriassa ovat admissiibeleitä. Koska tuo "abstrakti hölynpöly" tuntuu tässä hyvin luonnolliselta kieleltä puhua ongelmasta. Varsinkin koska tässä mennään voimallisesti äärellisessä joukko-opissa, niin että mahdollisten kategorioiden joukon luulisi olevan suhteellisen helppo löytää. "To pin the fucker down."

Mehän meinaan jo kysymyksenasettelusta suoraan nähdään, että kyse on jostain monoidaalisesta, äärelllisestä Setin alakategoriasta. Vielä tosi strukturoidusta sellaisesta, viitaten toiselta puolelta vaikka tableaux-kalkyyliin. Ja toi antaa meille yhtälörakenteessaan jopa tosi tarkat reunaehdot sekä vinkit siitä, mikä se meidän modulo on: loogiset monimuuttuja-equalityt, reduktiivisena puolena. Tuo puoli klassisesta teoriastahan on jokseenkin täydellinen jo.

Mutta se ei silti oikein vielä ole riittävää, kaunista ja lopullista. Se ei pysty puuttumaan monien taulujen väliseen riippuvuusongelmaan, se ei selitä miksi taulut pitää nimetä sen sijaan että voitaisiin mennä simppelillä universaalirelaatioteorialla, se ei yhtene bayesilaisen moniriippuvuusteorian kanssa, se ei selitä miksi meillä on null-arvoja, eikä se varsinkaan ota huomioon union-operaattorin syvällistä epämääräisyyttä dekompositiossa.

Siksi olen aika varma, että systemaattinen kategoriateoreettinen ekspositio relaatiotietokantateoriasta olisi paitsi tarpeellinen, myös hyödyllinen. Yhtenäistämään kaiken sen sekalaisen tauhkan johon yllä jo viittasin, jonka tunnen, ja joka ei toistaiseksi tee mullekaan ihan riittävästi järkeä. Siitä vois esim. lähteä ehkä, että join/liitos näyttää epäilyttävästi pullbackilta, samalla kun yhdiste/union pushoutilta. Myös tyypitettyjen lambdakalkyylien hierarkiaa/hilaa voisi ehkä käyttää hyväksi, jotta "epäilty saataisiin vihdoin kiinni".

No comments:

Post a Comment