Toon posts:

[MS SQL] Constraints

Pagina: 1
Acties:
  • 37 views sinds 30-01-2008

Verwijderd

Topicstarter
Ik ben bezig met een opdracht waarin we constraints moeten toevoegen, nou is dit opzich geen probleem, eerst zal ik even de CREATE code laten zien:

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*=========================================================================*/
/* Table: Passagier                            */
/*=========================================================================*/
CREATE TABLE    Passagier                   (
        passagiernummer         NUMERIC(6)  not null,
        naam                VARCHAR(35) not null,
        vluchtnummer            NUMERIC(5)  not null,
        geslacht            CHAR(1)     null,
        balienummer         NUMERIC(2)  null,
        stoel               CHAR(3)     null,
        inchecktijdstip         DATETIME    null,
    
        CONSTRAINT PK_Passagier     PRIMARY KEY     (passagiernummer),
        CONSTRAINT AK1_Passagier    UNIQUE      (vluchtnummer),
        CONSTRAINT AK2_Passagier    UNIQUE      (stoel),
        CONSTRAINT FK1_Passagier    FOREIGN KEY (vluchtnummer)  REFERENCES Vlucht(vluchtnummer),
        CONSTRAINT FK2_Passagier    FOREIGN KEY (balienummer)   REFERENCES Balie(balienummer),
        CONSTRAINT CK_geslacht      CHECK       (geslacht IN (‘M’, ‘V’)),
)


Hier heb ik de constraint CONSTRAINT CK_geslacht CHECK (geslacht IN (‘M’, ‘V’)), ook gewoon kunnen toevoegen, nou zit ik vast op de invoeging van:

voor elke passagier zijn het stoelnummer en de inchecktijdstip of beide niet ingevuld of beide wel ingevuld

ik heb het volgende geprobeerd


SQL:
1
2
3
ALTER TABLE Passagier
ADD CONSTRAINT stoel, inchecktijdstip CHECK ((stoel, incheckentijdstip IS NOT NULL) OR stoel, incheckentijdstip IS NULL
)


waar ik dus niet achter kan komen (heb net het hele sql boek doorgelezen) is hoe ik een constraint over meerdere records (stoel & incheckentijdstip) krijg, ik heb ' AND ' gebruikt en nu een comma maar ik kijk inmiddels scheel, het lukt me echt niet

alvast bedankt

[ Voor 2% gewijzigd door RobIII op 14-05-2007 12:13 . Reden: Code tags gefixed. Waarom gebruik je in hemelsnaam een table daarvoor :? ]


Verwijderd

Topicstarter
Kan niet meer editen?

ben een stapje verder

code:
1
2
ALTER TABLE Passagier
ADD CONSTRAINT CH_stoel CHECK (NOT(stoel IS NOT NULL AND incheckentijdstip IS NULL))


Server: Msg 1759, Level 16, State 1, Line 1
Invalid column 'incheckentijdstip' is specified in a constraint or computed-column definition.
Server: Msg 1750, Level 16, State 1, Line 1
Could not create constraint. See previous errors.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-11 15:10

Creepy

Tactical Espionage Splatterer

Wat is het probleem? Je eerste argument is de naam van de constraint en niet over welke velden deze contraint ligt. Vervolgens lijkt het me dat je met normale booleaanse logica de verschillende zaken aan elkaar kan knopen.

Dus zoiets:
code:
1
ADD CONSTRAINT StoelIncheckTijdstip CHECK ((Stoel IS NOT NULL AND inchecktijdstip IS NOT NULL)

En dan nog uitbreiden met de variant dat ze allebei ook null mogen zijn.

En *LEES* aub je foutmeldingen eens na. incheckentijdstip is niet hetzelfde als inchecktijdstip. Zeker dit soort foutmeldingen moet je makkelijk zelf op kunnen lossen.

[ Voor 16% gewijzigd door Creepy op 14-05-2007 12:35 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Ik zit me ff af te vragen of het wel mogelijk is om een constraint te definieren die over meer dan één column gaat ....

Edit: ja dus; table level constraints heet dat dan.

[ Voor 18% gewijzigd door whoami op 14-05-2007 12:39 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ik heb het op kunnen lossen.. de comment van Creepy over de error messages heeft me doen denken aan slordigheidsfouten.. achteraf was het niet de typfout maar heb ik een paar drop tables uitgevoert en niet meer terug aangemaakt, sorry dat het nogal een basis vraag was maar je weet hoe lastig het kan zijn als je de hele ochtend bezig bent met een klein(stom) probleem

nu heb ik
code:
1
2
ALTER TABLE Passagier
ADD CONSTRAINT CH_stoel CHECK (NOT(stoel IS NOT NULL AND inchecktijdstip IS NULL))
kunnen gebruiken, deze werkt nu ook maar als mijn constraint ga testen (alles gedropt.. opnieuw aangemaakt en mijn insert statement uitgevoert maar nou zonder een stoelnummer)

dan maakt hij deze rij gewoon aan... maar ben weer 1 stap verder

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
NOT(stoel IS NOT NULL AND inchecktijdstip IS NULL)
kun je herschrijven als:
stoel IS NULL OR inchecktijdstip NOT IS NULL

Tenminste, als mijn booleanse logica niet te roestig is geworden.
Dit lijkt me niet wat je wil.

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Als je de syntax mbt gebruik van OR, AND, NOT en haakjes kent is het toch zeer eenvoudig om te checken op beide velden null of beide velden niet null? :?

{signature}


Verwijderd

Topicstarter
heeft niet iemand hier een extreem goede tutorial site?
nu moet ik : voor elke passagier is de som van de gewichten van zijn/haar objecten kleiner dan of gelijk aan het maximale bagagegewicht per persoon van de betreffende vlucht

in onze les wordt niets behandeld en ik heb een sql boek gekocht die ik inmiddels zowat uit heb maar ik kan nergens echt opstapjes vinden.. waar halen jullie je antwoorden als je klem zit?

  • DamadmOO
  • Registratie: Maart 2005
  • Laatst online: 21-11 19:40
Moeten wij hier je huiswerk gaan maken?

Als je het niet snapt dan loop je toch gewoon naar je docent toe. Die is ervoor om je uitleg te geven wanneer je er zelf niet uit komt.

En je volgende vraag kunnen wij gewoon niet beantwoorden omdat wij niet de juiste tabellen tot onze beschikking hebben.

Hetgeen wat je moet doen is alle gewichten van alle bagage-items bij elkaar op tellen en dan kijken of het totaalgewicht kleiner is dan het maximale toegestane gewicht. Ik neem maar aan dat er een aparte tabel is met bagage-items met daarin het gewicht en ook dat er ook een aparte tabel is met het maximale gewicht.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Verwijderd schreef op woensdag 16 mei 2007 @ 11:28:
heeft niet iemand hier een extreem goede tutorial site?
Een beetje goed googlen, of anders een goed boek kopen ?
nu moet ik : voor elke passagier is de som van de gewichten van zijn/haar objecten kleiner dan of gelijk aan het maximale bagagegewicht per persoon van de betreffende vlucht
Dat zal je niet met een constraint kunnen oplossen, want hier zal je hoogstwaarschijnlijk gegevens uit meerdere tabellen nodig hebben. Hiervoor zal je eens naar triggers moeten kijken denk ik.
waar halen jullie je antwoorden als je klem zit?
logisch nadenken ?

https://fgheysels.github.io/


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 07:54

Janoz

Moderator Devschuur®

!litemod

Als er in de les niks wordt behandeld? Wat wordt er dan gedaan tijdens de les? Als je er niet uit komt lijkt het me handiger om gewoon naar je docent te stappen en het aan hem te vragen. Hetzij tijdens de les of gewoon erna.

Het is iig neit de bedoeling dat we hier je huiswerk gaan maken.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1

Dit topic is gesloten.