Jag gillar inte rdbms och/eller sql överhuvudtaget, så jag skulle
inte vilja ha det i botten på en applikationsstack jag byggde
överhuvudtaget. En del som kanske vet vad dom pratar om säger att
riktig, äkta relationsalgebra är jättebra på alla sätt och vis,
men att det som brukar kallas relationsdatabaser långt ifrån är
riktiga relationsdatabaser och att sql långtifrån är
relationsalgebra. Det har jag ingen möjlighet att bedöma, men jag
har upprepade gånger bankat huvet mot två (olika?) problem
arbetandes med rdbms-er:

1) Jag kan uttrycka vad jag vill i SQL, och databasen kan göra
    vad jag vill, men gör det på ett alldeles för ineffektivt sätt.

2) Jag kan uttrycka vad jag vill på svenska, i C, på ett
    skissblock eller genom att ringa in saker i ett kalkylark, men
    jag kan fan inte uttrycka det i SQL; det bara går inte.



Exempel på när 1) kan inträffa: tabell X innehåller 400 miljoner
rader. Vissa rader i denna tabell som uppfyller vissa inte
särskilt krångliga vilkor (kanske några joins/subselects?) skall
grupperas ihop och summeras. Det finns inga index som gör att man
kan plocka ut bara de rader man är intresserad av. Det gäller
alltså att få rdbms:en att springa igenom den stora tabellen _en
enda gång_ och summera ihop relevant data.

Hur jag än formulerar dethär i vanlig sql (även med en massa
hints) resulterar det i att rdbms:en springer framlänges och
baklänges, grupperar och sorterar och gör allehanda jobbiga saker
i dendär stora tabellen. Det tar inte en timme, som det skulle
göra i idealfallet, utan flera dygn. Svårt att få in i
körschemat!


I dethär läget är jag rökt, och måste fråga nån som gått de relevanta
oracle-kurserna eller som råkat snappa upp den relevanta voodoo som
behövs för att få databasen att göra det man vill att den skall
göra. Det brukar vara nån oraclespecifik secret sauce som inte går att
läsa sig till. Det är inte alltid det finns nån på plats som klarar
att svara på frågan. Det är inte ens säkert att konsulter inkallade
från oracle alltid kan lösa problemet (inte ett såhär enkelt exempel,
men samma typ av problem i en mycket mer komplex kontext). Isåfall får
man antingen leva med plågan eller riva allting och skriva om frågan
som pl/sql.


Fall 2) brukar jag råka ut för när jag skall summera/gruppera ihop
djupt nästlade grunkor med en massa subqueries, subsubqueries osv och
lite olika ranges, och lite olika förekomster av null på olika ställen
i tabellerna ifråga.  Jag brukar hamna i att jag vill referera i
wherevillkoren till nån aggregatkolumn som jag namngivit med "select
... as" en eller några våningar upp (eller till en annan subquery?,
kommer inte ihåg), men det går inte; det finns ingenting som heter
så. Sen provar jag att formulera om på några olika vis ett tag tills
det är dags att besöka experten. Som skriver om frågan till
oigenkännlighet: svaret på problemet är _inte_ att uttrycka sig på ett
listigt abstrakt vis utan att mycket mer konkret specificera hur
rdbms:en skall traversera tabellerna ifråga.

Sen kan jag se ett problem till med sql, och det är att man är
hänvisad till proprietär syntax om man skulle vilja modellera ett träd
eller en hierarkisk graf av något slag. Dock har jag inte träffat på
nåt sånt problem i verkligheten nån gång; sällan eller aldrig drabbas
nog en dba eller en sqldatabasdesigner av insikten att nånting
lämpligen modelleras som ett träd. Om man själv designade en databas
skulle nog risken föreligga att man skulle vilja ha nåt data
trädstrukturerat.


Jag undrar om någon omformulering av sql i python eller lispsyntax som
sedan trollas om till SQL hjälper mot 1 eller 2 ovan.

Skulle jag behöva skriva kod som bökade med en befintlig sqldatabas
kanske det vore vits med nåt sorts mappningslager. Kommer inte ihåg om
Dan Weinreb sagt nåt om hur dom gör på ITA (dom kör oracle i botten),
det kanske går att googla fram.

Jag tänker använda nån enkel objektdatabas (persistenta clos-klasser)
för mitt pågående enkla lisphack och nöjer mig med att skriva lispkod
istället för att formulera queries i nåt frågespråk. Skulle det bli
aktuellt att skriva invecklade frågor mot en databas i nåt eget
projekt nån gång skulle jag tjacka lispworks enterprise och skriva
frågorna i prolog. Men det skulle behöva vara på ett lite större
projekt, kostar trettifem lax. Kan inte nån ta och fixa till en bra,
fri prologkoppling ovanpå persistent clos? Cristophe Rhodes har
snyggat till Norvigs prolog från PAIP, kan inte nån skriva lite
debuggers, optimerare och sånt som man antagligen behöver om man skall
utföra riktigt arbete med en sån? Snälla?

Kolla Franz' prolog ovanpå allegrocache för vad som vore optimalt att
jobba med som databas. kostar tyvär $$$. (antagligen mycket mer än
lispwork enterprise, deras priser är en förhandlingsfråga).


--micke


_______________________________________________
Lisp mailing list
Lisp@lisp.se
http://mailman.nocrew.org/cgi-bin/mailman/listinfo/lisp

Till