Toon posts:

[SQL Server] "Computed Value"

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een vraagje over "Best practice" in computed values. SQL Server 2000 db, C# win app.

Stel ik heb een DB met daarin een tabel Betaling. Deze tabel heeft 5 kolommen, te weten:

ID, Bedrag1, Bedrag2, Bedrag3 en Totaal. De kolom Totaal is eigenlijk een berekening: ((Bedrag1*Bedrag2)+Bedrag3).

Om Totaal te berekenen kan je voor diverse opties kiezen:

Een computed value d.m.v. het maken van een Formula, een trigger, of een view in SQL Server. Daarnaast kan natuurlijk ook de applicatie de waarde kunnen berekenen en in de DB zetten.

Wat is hiervoor nu eigenlijk de "best practice" en wat voor gevolgen heeft dat voor de performance?

  • maikel
  • Registratie: Januari 2001
  • Laatst online: 20-08 09:32
Waarom wil je het totaal ook nog eens opslaan?
Bedrag1 t/m 3 bieden dezelfde informatie en je zou het dan dus dubbel opslaan. En iets dubbel opslaan in de DB is volgens mij nooit echt de bedoeling.

Verwijderd

Topicstarter
maikel schreef op 17 April 2003 @ 11:07:
Waarom wil je het totaal ook nog eens opslaan?
Bedrag1 t/m 3 bieden dezelfde informatie en je zou het dan dus dubbel opslaan. En iets dubbel opslaan in de DB is volgens mij nooit echt de bedoeling.
Dat klopt en in principe heb ik de kolom Totaal ook niet nodig.

  • whoami
  • Registratie: December 2000
  • Laatst online: 20:31
Wat zit er in Bedrag1, Bedrag2, Bedrag3?

Hoe moeten we dat zien? Zijn dat misschien de verschillende betalingen die een klant kan doen (gespreid betalen?)
Zoja, dan is je datamodel niet goed.
Verwijderd schreef op 17 April 2003 @ 11:12:
[...]


Dat klopt en in principe heb ik de kolom Totaal ook niet nodig.
Waarom gebruik je hem dan?

[ Voor 35% gewijzigd door whoami op 17-04-2003 11:13 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 17 April 2003 @ 11:13:
Wat zit er in Bedrag1, Bedrag2, Bedrag3?

Hoe moeten we dat zien? Zijn dat misschien de verschillende betalingen die een klant kan doen (gespreid betalen?)
Zoja, dan is je datamodel niet goed.
Nee dat niet. Je moet het voorbeeld meer zien als dat Bedrag1 en 2 uren zijn en dat Bedrag3 het uurloon is.
Waarom gebruik je hem dan?
Ik gebruik de kolom Totaal nog niet, maar ik ben aan het nadenken over het ontwerp. Aangezien dit soort data mij vaak lijkt voorkomen in applicaties vermoed ik dat er ook een "best practice" is. Bijvoorbeeld om dit soort data altijd in je applicatie te laten berekenen. Of bijvoorbeeld vanwege de applicatie performance dit te laten berekenen door een Formula en dan toch nog weg te schrijven in je DB zodat je applicatie minder hoeft te rekenen.

Verwijderd

Bij datamodelleren is het gebruikelijk geen berekende velden op te slaan.
Echter kan het uit performanceoverwegingen wel interessant zijn om het op te slaan.

Als ik jouw situatie moet inschatten: neem een stored procedure in je DBMS op welke voor jou de waarde berekent op het moment dat je hem nodig hebt !
Pagina: 1