sql >> Databasteknik >  >> RDS >> Sqlserver

Vilka är fördelarna och nackdelarna med att behålla SQL i lagrade processer kontra kod

Jag är inte ett fan av lagrade procedurer

Lagrade procedurer är MER underhållbara eftersom:* Du behöver inte kompilera om din C#-app när du vill ändra SQL

Det slutar med att du kompilerar om det ändå när datatyper ändras, eller om du vill returnera en extra kolumn, eller vad som helst. Antalet gånger du "transparent" kan ändra SQL underifrån din app är ganska litet på det hela taget

  • Det slutar med att du återanvänder SQL-kod.

Programmeringsspråk, inklusive C#, har denna fantastiska sak, som kallas en funktion. Det betyder att du kan anropa samma kodblock från flera ställen! Fantastisk! Du kan sedan lägga den återanvändbara SQL-koden i en av dessa, eller om du vill bli riktigt högteknologisk kan du använda ett bibliotek som gör det åt dig. Jag tror att de kallas Object Relational Mappers och är ganska vanliga nuförtiden.

Kodupprepning är det värsta du kan göra när du försöker bygga en underhållsbar applikation!

Håller med, vilket är anledningen till att lagrade procs är en dålig sak. Det är mycket lättare att omstrukturera och dekomponera (bryta upp i mindre delar) kod till funktioner än SQL till... block av SQL?

Du har 4 webbservrar och ett gäng Windows-appar som använder samma SQL-kod Nu insåg du att det finns ett litet problem med SQL-koden så gör du hellre...... ändra proc på ett ställe eller trycka koden till alla webbservrarna, installera om alla skrivbordsappar (klicka en gång kan hjälpa) på alla Windows-rutor

Varför ansluter dina Windows-appar direkt till en central databas? Det verkar som ett ENORMT säkerhetshål just där, och en flaskhals eftersom det utesluter cachelagring på serversidan. Borde de inte ansluta via en webbtjänst eller liknande till dina webbservrar?

Så, tryck 1 ny sproc, eller 4 nya webbservrar?

I det här fallet är lättare att driva en ny sproc, men enligt min erfarenhet påverkar 95% av "pushade ändringar" koden och inte databasen. Om du skickar 20 saker till webbservrarna den månaden, och 1 till databasen, förlorar du knappast mycket om du istället skickar 21 saker till webbservrarna och noll till databasen.

Enklare kodgranskning.

Kan du förklara hur? Jag fattar inte det här. Särskilt eftersom sprocs förmodligen inte är i källkontroll och därför inte kan nås via webbaserade SCM-webbläsare och så vidare.

Fler nackdelar:

Storedprocs bor i databasen, som för omvärlden framstår som en svart låda. Enkla saker som att vilja sätta dem i källkontroll blir en mardröm.

Det är också frågan om ren ansträngning. Det kan vara vettigt att dela upp allt i en miljon nivåer om du försöker motivera för din VD varför det bara kostade dem 7 miljoner dollar att bygga några forum, men annars är att skapa en lagrad proc för varje liten sak bara extra åsnaarbete för nej. fördel.



  1. där 1=1 påstående

  2. Hur infogar man JSONB i Postgresql med Python?

  3. Hur kontrollerar jag om trigger finns i PostgreSQL?

  4. Hur CEILING() fungerar i MariaDB