Jezus hoeven jullie overdag niet te werken ofzo, wat een hoop extra zooi, zo kan ik niet netjes aansluiten.

Toch even reageren op reacties op mijn posts van een paar pagina's terug, want ik zie een aantal argumenten in mijn oorspronkelijke verhaal niet direct terug in de rest van de posts.
whoami schreef op 29 augustus 2004 @ 20:12:

Wat bedoel je dan?
Ik had het over data-centrische taken. Procedures die heel intensief met data uit de DB werken schrijf je imo beter in een SP om zo roundtrips te gaan besparen.
Je hoeft niet persé een SP te gebruiken om roundtrips te besparen. Je kunt ook een SQL batch naar de database toe sturen en dan heb je precies hetzelfde effect. Het issue wat hier wordt aangegeven dat je SQL code in de applicatie moet managen, en niet in een SP op de database moet stoppen. Vanuit het oogpunt van performance is het niet nodig om een SP in te zetten ipv de SQL van de applicatielaag te laten komen.
EfBe schreef op 29 augustus 2004 @ 20:14:
[De DBA vindt het belangrijk dat SQL code die op de DB wordt uitgevoerd voor hem inzichtelijk is.]
No offence, maar: lekker belangrijk wat die DBA vindt. Het punt is: de DBA is de beheerder van de database, maar niet de ontwikkelaar van de API. Tevaak wordt de DBA de persoon die bepaalt op welke wijze er met de data wordt omgegaan in een applicatie, terwijl de DBA een ondergeschikte rol zou moeten spelen.
Vind jij het vreemd dat de DBA de persoon is die bepaalt hoe er met de database wordt omgegaan? Ik vind het niet vreemd dat de DBA kritisch is. Als de database server crasht, of hij wordt veel te traag, of er gebeuren gekke dingen met de data, dan is hij wel verantwoordelijk. Daar komt nog bij dat de database server in zijn lifecycle vaak door verschillende applicatie platforms wordt aangesproken: VB, Java, .NET, Python, TclTk, Cobol, whatever. Moet een DBA daar allemaal in thuis zijn om te begrijpen wat er op de database af komt? SP's bieden dan iets uniforms, wat hij los van de rest van de code kan inspecteren, testen en autoriseren.
Ik snap je opmerking over de API ook niet. Een API is de interface naar boven toe. De API van je DAL wordt niet beïnvloed door het gebruik van SP's, want de DAL moet dit juist abstraheren. Het is natuurlijk nog steeds nuttig om een DAL laag in je applicatie te hebben, ook al gebruik je SP's, maar een DBA heeft nooit invloed op je API, tenzij hij bepaalde constraints op de functionele data wil (en dat is een heel andere discussie dan inline SQL vs SP).
[Stored procs hoeven geen onderhoudsprobleem te betekenen. Een database aanpassing is zowieso een onderhoudsprobleem. Als je automatische SQL scripts gebruikt voor CRUD operaties, dan kun je ook automatisch stored procs genereren en je hebt een vergelijkbaar onderhoudsscenario. Als meerdere applicaties gebruik maken van dezelfde database dan hoef je de SQL code maar op één plek te onderhouden en heb je in principe onderhoudswinst, maar je kunt natuurlijk ook applicatie componenten hergebruiken om hetzelfde effect te bereiken.]
Dit is onzin.
Dat is helemaal geen onzin, ik noem toch argumenten, die jij niet weerlegt. Ik vind het ook geen stijl van reageren.

Als jouw tabel 5 keer wijzigt, heb jij 5 versies van je proc in de db staan. Je moet dus elke keer de procs weghalen die je hebt gegenereerd. Dit kan lastig zijn.
Zoals ik in mijn oorspronkelijke verhaal al betoogde heb je zowieso al fiks wat onderhoud als je database aanpassingen maakt. Procs weghalen hoeft niet eens want je kunt ze gewoon updaten. En zelfs droppen is geen punt, je hoeft echt geen raketgeleerde te zijn om dat gewoon in het proc scriptje te stoppen, tools als VS.Net doen het zelfs al automatisch voor je.
Een procedure heeft verder als nadeel dat het een static interface heeft: je kunt niet even een filter aanpassen voor een specifieke situatie. Uiteraard komen nu de mensen die met nullable parameters dit op gaan lossen maar dit is maar schijn: je procedure wordt erg ingewikkeld daardoor en veelal veel trager. Dit houdt dus in dat je procedure logica in feite onder meerdere interfaces wordt opgeslagen: filter on A, filter on A and B, filter on A and B + C etc. etc.
En je hebt zeker wel een dynamische interface op je API ofzo? Dan schrijf je toch gewoon meer proc's voor die andere situatie. Op je applicatielaag maak je er ook meerdere methodes voor, dus dan heb je dáár het onderhoudsprobleem, met als enige verschil dat je niet ff opnieuw je scripts kunt runnen om te kijken of je sql nog valide is.
Wijzigt de logica van het BL component, dan is dat dus alleen een wijziging van het BL component, niet ergens anders. Wanneer je een proc gebruikt, moet je goed documenteren waar deze proc nog meer gebruikt wordt.
Met name dat laatste is funest. Het is niet zo moeilijk dat te documenteren, dat weet een 3-jarig kind. Het probleem begint wanneer het systeem 2 jaar in productie is en er 3 clients op draaien. In die 2 jaar zijn er wellicht legio wijzigingen geweest. Houdt iedereen die wijzigingen bij in de documentatie? Ik moet de 1e organisatie nog tegenkomen die dat doet.
Het documentatie probleem los je toch niet op door géén stored procs te gebruiken???

Die legio wijzigingen zijn net zo goed een ramp in applicatie code, misschien zelfs nog erger omdat het daar minder opvalt als SQL code volgens het copy pasta patroon wordt ontwikkeld, waarbij natuurlijk bij wijzigingen de ene lap code wel wordt aangepast, en de andere niet.
Ik werk nu in een integratieproject van 7 database systemen variërend van 15 tot 2 jaar oud, en ze worden allemaal door een andere applicatielaag ontsloten, met C++, Fortran, Delphi, Java EJB/CMP. Sommige databases hebben zelfs geen constraints op de tabellen (alles nullable) omdat ze ontworpen zijn met de gedachte dat de applicatielaag de vrijheid moest hebben om alles te doen en de verantwoordelijkheid had om het te checken. Geen van de systemen maakt gebruik van stored procs, en geen van de systemen is goed gedocumenteerd. Het is gewoon één grote onderhoudsnachtmerrie, die eerder kleiner was geweest met sp's, maar zeker niet groter.
[Ik heb zelf een paar applicaties gemaakt met stored procedures en zonder en
mij maakt het eigenlijk niet zo veel uit. Met tooltjes als CodeSmith kun je vrij makkelijk de triviale procs laten genereren.
Echt *nodig* vind ik stored procs ook niet.]
Het is wel grappig om te lezen vaak dat de mensen die pro-procs zijn zich gedragen als, (no offence), streng-gelovigen: zonder enig argument claimen dat X en Y waar is. Ach ja, het is leuk tijdverdrijf, alleen soms wordt het wat vervelend

Hum ik ben dus niet pro-procs, zoals de dikke letters wellicht laten zien. Maar sommige streng-gelovigen kunnen alleen zwart wit denken, dus het feit dat ik er niet
tegen ben zal me wel een "pro-procs fundamentalist" maken.
Ik ben overigens wel pro-OR mapper, maar dat is vanwege de toegevoegde abstractie en productiviteitswinst. Bovendien kun je met een goede OR mapper nog steeds stored procedures gebruiken.