Toon posts:

[oracle] Constraints maken

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een aantal tabellen, en daar wil ik een aantal constraints op toepassen.

Heb geen idee hoe ik deze dingen moet oplossing dmv een constraint.

Wel weet ik hoe ik deze kan gebruiken dus dat hoeft ook niet uitgelegd te wordenn.

Het gaat om de volgende tabel.

CREATE TABLE Stage
(
stageid number(4) Not Null,
studentid number(4) Not Null,
opdrachtid number(4) Not Null,
docentid number(4) Not Null,
begindatum date Not Null,
einddatum date Not Null,
datumbezoek1 date Not Null,
datumbezoek2 date Not Null,
beoordelingdocent number(2, 2),
beoordelingbedrijf number(2, 2),
Primary Key(stageid),
Foreign Key(studentid) References Student,
Foreign Key(opdrachtid) References Opdracht,
Foreign Key(docentid) References Docent
);

Daar moet ik deze constraints inbouwen.

De beoordeling van de docent mag alleen gegeven worden als de bedrijfsbeoordeling voldoende is en 100 stagedagen volgemaakt zijn.

De bezoek data mogen alleen ingevuld zijn als er een docent is.

Kan iemand mij hier mee op weg helpen zodat ik het idee er achter snap en dan kan ik zelf met pl/sql verder!

Heel erg beadnkt

  • DamadmOO
  • Registratie: Maart 2005
  • Laatst online: 21-11-2025
Ik heb zelf nog nooit met oracle gewerkt maar binnen SQL server kan je dat met check constraints oplossen. Zoiets hebben ze ook wel bij oracle ingebouwd denk ik.

En even een url:
http://www.techonthenet.com/oracle/check.php

[ Voor 17% gewijzigd door DamadmOO op 16-10-2006 19:45 . Reden: url toevoegen ]


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

SQL:
1
2
alter table stage add constraint stage_ck1 
check (beoordelingdocent is null or (beoordelingbedrijf >= 6 and (einddatum - begindatum) >= 100));

zoiets?

Who is John Galt?


  • The Fox NL
  • Registratie: Oktober 2004
  • Laatst online: 23:14
De eerste constraint zal er ongeveer zo uitzien:
SQL:
1
2
3
4
5
6
7
8
9
CONSTRAINT c_stage_beoordeling
CHECK (
  (beoordelingbedrijf IS NOT NULL AND  
  beoordelingbedrijf >= 5.5 AND
  stagedagen >= 100 AND
  stagedagen IS NOT NULL)
  ) OR
  beoordelingdocent IS NULL
)

Paar opmerkingen over deze constraint:
  • In de check zitten twee dingen: beoordelingdocent mag NULL zijn of beoordelingdocent mag allebei zijn als bepaalde voorwaarden zijn voldaan.
  • In je tabel mis ik het aantal volmaakte stagedagen.
  • Zoals je ziet doe ik een IS NOT NULL check op zowel beoordelingbedrijf als op stagedagen, er staat me iets van bij dat een check op een waarde altijd true teruggaf als de waarde NULL was. Je moet zelf maar kijken of beoordelingbedrijf >= 5.5 true geeft als beoordelingbedrijf NULL is.
  • Een beoordeling van een docent mag waarschijnlijk ook niet gegeven worden als er geen docent gekoppeld is.
Je tweede constraint mag je zelf uitvogelen. Ik weet wel dat je tweede constraint niet nodig is omdat je bijna bij elk veld NOT NULL zet. Dat is waarschijnlijk niet de bedoeling, dus je zal bij een aantal velden NOT NULL moeten weghalen en dan je constraint erop zetten.

edit: spuitelf ;)

[ Voor 3% gewijzigd door The Fox NL op 16-10-2006 20:46 ]


  • DoDo
  • Registratie: Juli 2001
  • Laatst online: 12-02 21:41
Blijkbaar zitten wij in dezelfde klas ;), Die man zij dat je de oracle constraints in de form zelf moest maken tegen mij iig. (Geen idee of dit correct was maar ik heb daar wat in elkaar geprutst met IFjes)