Search

onze sponsors

microsoft_logo.gif


 

computrain_logo.JPG

Forum Login | Register
   Forum

 

Subject: Hulp gevraagd bij update tabellen
Prev Next
You are not authorized to post a reply.

Author Messages
Arjen ZoutewelleUser is Offline

Posts:1

30-08-2010 12:03:31 Alert 

Beste heren van deze website.

Voor school moet ik een database maken met verschillende sql stukken erin.

NU heb ik als case een restaurant met daarin een klantbestelling. ( als klantbestelling word aangemaakt word het gehele product gelijk uit voorraad gehaald) 

Nu heb ik dus tabel voorraad

CREATE TABLE Voorraad
(ArtikelID INTEGER NOT NULL,
Aantal INTEGER,
CONSTRAINT PrimaryKey PRIMARY KEY (Aantal, ArtikelID),
CONSTRAINT ArtikelenVoorraad FOREIGN KEY (ArtikelID) REFERENCES Artikelen(ArtikelID) ON UPDATE CASCADE);


en tabel klantbestelling met daarin 

CREATE TABLE Klantbestelling
(ID AUTOINCREMENT(8, 1) NOT NULL,
Bonnr INTEGER,
ArtikelID INTEGER,
Aantal INTEGER,
Datum DATE,
CONSTRAINT PrimaryKey PRIMARY KEY (ID),
CONSTRAINT Klb_Art FOREIGN KEY (ArtikelID) REFERENCES Voorraad(ArtikelID),
CHECK (Aantal > 0));

(1 bnr heeft meerdere artikelen)


(de check is om te voorkomen dat een klantbestelling word aangemaakt als er geen product is genomen)

NU wil ik dus dat als ik query klantbestelling aanmaken uitvoer dat die gelijk de voorraad bijwerkt. 



Nu dacht ik heel simpel door de query klantbestelling te doen;

INSERT INTO Klantbestelling VALUES (1,1,1,0,#05-08-2010#);

en dan vervolgens moet de werknemer een querry aanklikken die de voorraad update doormiddel van de laaste klantbestelling te gebruiken.

(dus medewerker maakt eerst een klantbestelling aan en vervolgens klikt die daarna op update database om de laaste klantbestelling te veranderen in voorraard.

Maar ik weet niet hoe ik dit voor elkaar moet krijgen

ALvast bedankt voor de hulp!

Arjen

Hugo KornelisUser is Offline

Posts:46

30-08-2010 13:04:15 Alert 
Beste Arjen,

Aangezien het voor school is, is het de bedoeling dat je ervan leert. Je krijgt van mij dus geen kant en klaar antwoord, maar wel wat tips om in de juiste richting verder te kunnen zoeken.

Allereerst over het ontwerp. Bij de tabel "Voorraad" raad ik je aan nog eens goed te kijken naar de functionele afhankelijkheden. Is deze tabel eigenlijk wel nodig?

De tabel "Klantbestelling" heeft niet eens een echte primary key. Je AUTOINCREMENT kolom (die in SQL Server overigens IDENTITY heet) is een zogenaamde "surrogate key" (google de term als je hem niet kent); die kan nooit in plaats van een "echte" sleutel gebruikt worden, maar hoogstens in aanvulling op een echte sleutel.

Bij beide tabellen zal je moeten kijken welke kolommen NULL kunnen bevatten en welke niet. Dat scheelt je zo weer een paar aftrekpunten!

Ten slotte, om op het antwoord van je vraag te komen - het is in SQL niet mogelijk om met één query meerdere tabellen tegelijk bij te werken. (Tenzij je met SQL Server 2008 werkt, dan kan je MISSCHIEN iets bereiken met "composable DML" - maar dat is een behoorlijk geavanceerd onderwerp!)
De meeste gangbare manieren om dit soort dingen op te lossen zijn:
- Een stored procedure gebruiken die vanaf de client wordt aangeroepen en die dan beide tabellen na elkaar bijwerkt
- Een trigger die bij elke modificatie in een tabel automatisch acties gaat uitvoeren, bv de modificatie van de adnere tabel
In beide gevallen moet je bij het ontwerp er rekening houden met de gegevens ook consistent blijven als er iets mis gaat. En (maar dat is weer redelijk geavanceerd) je moet proberen de kans op deadlocks bij zwaar gebruik te minimaliseren.

Hopelijk geven deze tips je genoeg stof om zelf tot een goed antwoord op je vragen te komen en er een boel van te leren. En zo niet, vergeet dan vooral niet dat de docent er niet is om je te straffen met lage cijfers, maar om je te helpen iets te leren wat je daarvoor nog niet kon. Hem of haar om hulp vragen is geen schande!

Succes!

Met vriendelijke groeten,

Hugo Kornelis (SQL Server MVP)
You are not authorized to post a reply.
Forums > Forums > Ontwikkelen > Hulp gevraagd bij update tabellen



ActiveForums 3.6
  
Copyright (c) 2012 PASS Nederland   Privacy Statement  Terms Of Use