Referentie eigen tabel met check

Pagina: 1
Acties:
  • 269 views

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Edwinl
  • Registratie: November 2009
  • Laatst online: 13-06 19:21
Beste GOT's,

Volgende aan de hand: ik ben bezig met iets waar jullie denk ik niks aan vinden:

Volgende tabel moet gemaakt worden in MySQL
Docent
code
naam
aanstelling
teamleider

Een docent kan 0 of 1 teamleider hebben , dus NULL is toegestaan.
Teamleider kan uiteraard meer docenten onder zich hebben.

Deze moet dus in mysql gevoerd worden.. had het volgende bedacht:

CREATE TABLE docent(
code int( 8 ) NOT NULL AUTO_INCREMENT,
naam varchar(25),
aanstelling ENUM ( "deeltijd", "voltijd" ),
teamleider int( 8 ) ,
PRIMARY KEY (code),
FOREIGN KEY ( teamleider ) REFERENCES docent (code)
ON DELETE SET NULL
ON UPDATE CASCADE

) ENGINE=InnoDB;


Echter hoe check ik het volgende:
Ik wil een docent toevoegen die dus een teamleider heeft met aanstelling voltijd.
Dus als ik per ongeluk een verkeerde code voor teamleider opgeef, 1 van een docent die deeltijd docent is, dat ik de insert query niet kan voltooien..

Edit: geprobeerd:
- Check bij de foreign key, echter die kijkt alleen naar de code of die bestaat..
als ik dus CHECK ( aanstelling = 'voltijd' ) doe doet hij het niet.

Gegoogled op : table constraints + check constraints..


Iemand een idee?

[ Voor 10% gewijzigd door Edwinl op 21-09-2010 17:16 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ja, dat kan met een trigger bijvoorbeeld; maar doorgaans prefereer ik mijn BLL in de software voor dat soort zaken. Maar wat had je zelf al geprobeerd/gezocht/gevonden? Zie ook onze Quickstart

[ Voor 10% gewijzigd door RobIII op 21-09-2010 17:10 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Edwinl
  • Registratie: November 2009
  • Laatst online: 13-06 19:21
RobIII schreef op dinsdag 21 september 2010 @ 17:07:
[...]

Ja, dat kan met een trigger bijvoorbeeld; maar doorgaans prefereer ik mijn businesslayer in de software voor dat soort zaken. Maar wat had je zelf al geprobeerd/gezocht/gevonden? Zie ook onze Quickstart
Proberne, googlen.. echter nog niks zinnigs gevonden..
Het is om te leren hoe dit te werk gaat, dus een zetje in de goeie richting zou wel helpen denk ik.. welke triggers dacht u aan?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Edwinl schreef op dinsdag 21 september 2010 @ 17:09:
[...]

Proberne, googlen.. echter nog niks zinnigs gevonden..
Waar zocht je dan op? Nogmaals; zie onze Quickstart. We zien hier graag terug wat je hebt geprobeerd/gezocht/gevonden, wat er niet werkt(e), waarom je denkt dat het niet werkt(e), welke code je hebt gebruikt etc. etc. Ik zie daar niets van terug in je topicstart noch in deze reactie anders dan "ik kan niks zinnigs vinden..."
Edwinl schreef op dinsdag 21 september 2010 @ 17:09:
Het is om te leren hoe dit te werk gaat
Wat zegt je docent? Wat staat er in je boeken?
Edwinl schreef op dinsdag 21 september 2010 @ 17:09:
dus een zetje in de goeie richting zou wel helpen denk ik..
Dat heb je toch bij deze gehad :? We zijn hier niet zo van het handjes vast houden ;) Klik eens op de linkjes die ik in mijn post heb staan en begin daar eens ;) ...
Give a man a fish and feed him for a day. Teach a man how to fish and feed him for a lifetime.

[ Voor 27% gewijzigd door RobIII op 21-09-2010 17:15 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Edwinl
  • Registratie: November 2009
  • Laatst online: 13-06 19:21
zo beter?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Niet bepaald; die anderhalve zin maakt het nou niet echt bepaald duidelijker. Heb je hier iets aan? En zo nee, laat dan eens concrete code zien van zaken die je geprobeerd hebt (en dus geen vage "als ik dus CHECK ( aanstelling = 'voltijd' ) doe doet hij het niet"). Define "doet het niet".

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Edwinl
  • Registratie: November 2009
  • Laatst online: 13-06 19:21
RobIII schreef op dinsdag 21 september 2010 @ 17:30:
[...]

Niet bepaald; die anderhalve zin maakt het nou niet echt bepaald duidelijker. Heb je hier iets aan? En zo nee, laat dan eens concrete code zien van zaken die je geprobeerd hebt (en dus geen vage "als ik dus CHECK ( aanstelling = 'voltijd' ) doe doet hij het niet"). Define "doet het niet".
Dan vogt hij hem gewoon toe want hij pakt de waarde die je invoegt ( dus als ik een voltijd docent toevoeg, met een teamleider deeltijd ) kijkt hij naar de waarde van de nu ingevoerde waarden

Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
RobIII schreef op dinsdag 21 september 2010 @ 17:07:
[...]

Ja, dat kan met een trigger bijvoorbeeld; maar doorgaans prefereer ik mijn BLL in de software voor dat soort zaken.
Hmmmm, is een foreign key business logic? Zo ja, waarom gebruik je dan eigenlijk een DBMS? Die staan dan bol van de business logica, zelfs de keuze voor een datatype is logica.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
cariolive23 schreef op dinsdag 21 september 2010 @ 17:49:
Hmmmm, is een foreign key business logic?
Zienswijze, maar bij mij niet nee.
cariolive23 schreef op dinsdag 21 september 2010 @ 17:49:
Zo ja, waarom gebruik je dan eigenlijk een DBMS? Die staan dan bol van de business logica, zelfs de keuze voor een datatype is logica.
Hier raak ik je kwijt. Misschien dat we hetzelfde bedoelen maar langs elkaar praten?

Edit: Ah, ik begrijp de verwarring :D

Ik bedoel dus dat ik (inderdaad) wél een FK naar de eigen tabel zou maken maar de (aanstelling==voltijd) zou ik checken in de software wanneer een teamleider gezet zou worden (en dan zul je ook nog een check moeten doen op 't moment dat je de aanstelling wijzigt (naar bijvoorbeeld deeltijd) bij een docent). Ik vind, maar dat is persoonlijk, een trigger(s) daar niet handig voor.

[ Voor 28% gewijzigd door RobIII op 21-09-2010 18:17 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Edwinl schreef op dinsdag 21 september 2010 @ 17:09:
[...]

Proberne, googlen.. echter nog niks zinnigs gevonden..
Het is om te leren hoe dit te werk gaat, dus een zetje in de goeie richting zou wel helpen denk ik.. welke triggers dacht u aan?
Dan verwachten we ook dat je dat in je topic vermeld, en dan dus niet alleen dat je gezocht en geprobeerd hebt, maar ook wat het resultaat daarvan was, en waarom het niet werkte.

Met het woord trigger kan je zelf al een hoop vinden, je moet natuurlijk niet gaan verwachten dat we hier alles voor je gaan voorkauwen. Als je op triggers zoekt zul je zien dat je bij een update een andere actie kan uitvoeren ( Het checken van je conditie ), en eventueel de update kan laten mislukken.

Maar zoals RobIII ook al aangeeft is het eigenlijk netter om eerst gewoon te kijken of de geselecteerde teamleider wel aan de voorwaarde voldoet, voordat je een update/insert doet.

Lees de quickstart die RobIII al aanhaalt nog eens door, want op deze manier voldoet het in ieder geval niet aan onze voorwaarde. We willen je best helpen, maar dan verwachten we wel dat je zelf wat meer moeite in je topic stopt.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1

Dit topic is gesloten.