sql >> Database teknologi >  >> RDS >> Sqlserver

Hvad er fordele og ulemper ved at holde SQL i Stored Procs versus kode

Jeg er ikke fan af lagrede procedurer

Lagrede procedurer er MERE vedligeholdelige, fordi:* Du ikke behøver at omkompilere din C#-app, når du vil ændre noget SQL

Du ender alligevel med at kompilere det igen, når datatyper ændres, eller du vil returnere en ekstra kolonne eller hvad som helst. Antallet af gange, du 'gennemsigtigt' kan ændre SQL'en fra undersiden af ​​din app, er generelt ret lille

  • Du ender med at genbruge SQL-kode.

Programmeringssprog, inklusive C#, har denne fantastiske ting, kaldet en funktion. Det betyder, at du kan kalde den samme kodeblok fra flere steder! Fantastiske! Du kan derefter lægge den genanvendelige SQL-kode inde i en af ​​disse, eller hvis du ønsker at blive virkelig højteknologisk, kan du bruge et bibliotek, som gør det for dig. Jeg tror, ​​de kaldes Object Relational Mappers, og er ret almindelige i disse dage.

Kodegentagelse er det værste, du kan gøre, når du forsøger at bygge et program, der kan vedligeholdes!

Enig, hvorfor storedprocs er en dårlig ting. Det er meget nemmere at omstrukturere og dekomponere (bryde i mindre dele) kode til funktioner end SQL til... blokke af SQL?

Du har 4 webservere og en masse Windows-apps, der bruger den samme SQL-kode. Nu indså du, at der er et lille problem med SQL-koden, så vil du hellere...... ændre procen ét sted eller skubbe koden til alle webserverne, geninstaller alle desktop-apps (et klik kan hjælpe) på alle Windows-boksene

Hvorfor forbinder dine Windows-apps direkte til en central database? Det virker som et KÆMPE sikkerhedshul lige dér, og en flaskehals, da det udelukker server-side caching. Skulle de ikke oprette forbindelse via en webservice eller lignende til dine webservere?

Så skub 1 ny sproc eller 4 nye webservere?

I dette tilfælde er det lettere at skubbe en ny sproc, men efter min erfaring påvirker 95% af 'pushede ændringer' koden og ikke databasen. Hvis du skubber 20 ting til webserverne den måned, og 1 til databasen, taber du næppe meget, hvis du i stedet skubber 21 ting til webserverne og nul til databasen.

Det er nemmere at gennemgå kode.

Kan du forklare hvordan? Jeg forstår det ikke. Især da sproc'erne sandsynligvis ikke er i kildekontrol og derfor ikke kan tilgås via webbaserede SCM-browsere og så videre.

Flere ulemper:

Storedprocs lever i databasen, som for omverdenen fremstår som en sort boks. Simple ting som at ville sætte dem i kildekontrol bliver et mareridt.

Der er også spørgsmålet om ren indsats. Det kan måske give mening at dele alt op i en million niveauer, hvis du forsøger at retfærdiggøre over for din administrerende direktør, hvorfor det lige kostede dem 7 millioner dollars at bygge nogle fora, men ellers er det at skabe et lagret proc for hver lille ting bare ekstra æselarbejde for nej. fordel.



  1. Hvad er MariaDB? Hvordan virker MariaDB?

  2. Kan ikke forbinde PostgreSQL til fjerndatabasen ved hjælp af pgAdmin

  3. ABS() Funktion i Oracle

  4. Hvordan arbejder jeg med høj præcision decimaler i PHP