Toon posts:

[MySQL] Conflicten voorkomen in afsprakentabel

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een softwarepakketje waarin het mogelijk is afspraken te plannen. Deze afspraken mogen niet conflicteren. Nu kan ik natuurlijk in mijn frontend functies maken om dit te controleren / voorkomen, maar ik vraag me af of het ook mogelijk is zoiets d.m.v. de opbouw van je database in MySQL te doen. Heeft iemand hier ervaring mee? Is het uberhaupt mogelijk?

  • koli-man
  • Registratie: Januari 2003
  • Laatst online: 13-05 14:28

koli-man

Bartender!!!!

Wat mag hier niet conflicteren? De tijd of datums of id's in db?
Als het de tijd is, dan selecteer je de datum, vergelijk deze en check daarna of de tijden conflicteren, en geef daar dan een melding van o.i.d.
Geef nog iets meer info.

Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff


  • ikke007
  • Registratie: Juni 2001
  • Laatst online: 21-05 13:08
Je zou bijvoorbeeld je afspraken tabel een primary key kunnen geven van de column datum/tijd, dan is het niet mogelijk om 2 afspraken op dezelfde tijd/datum te hebben. echter kan het dan weer wel om een afspraak te maken op 16-6-2004 om 15.00 en op 16-6-2004 om 15.01

Tweede optie zou dan zijn om het op invoer niveau te doen. Dus eerst een select doen op je database select * from afspraken where datum = '16-6-2004' AND tijd between '15:00:00' and 15:30:00' (waarbij die twee tijden dan de start/eind tijd zijn van je afspraak die je wilt invoeren) als mysql_num_rows($exc_query) <> 0 --> er bestaan al 1 of meerdere afspraken --> insert mag niet. (mysql_num_rows() is een php functie btw)

succes!

Lets remove all security labels and let the problem of stupidity solve itself


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

In een RDBMS los je dit op met triggers. In MySQL los je dit op in je applicatie :)

Professionele website nodig?


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12:00

Janoz

Moderator Devschuur®

!litemod

Je zou ook een dag in blokken op kunnen delen. Denk hierbij bijvoorbeeld aan blokken van een kwartier. Een blok wijs je vervolgens toe aan een afspraak. Aangezien een blok slechts naar 1 afspraak kan verwijzen kan je nooit dubbel ingepland worden. Nadeel hiervan is dat bij het wijzigen ov verwijderen van afspraken goed moet worden gecontroleerd of alle blocken wel weer mee veranderen. Ook dit is trouwens wel met constraints op te lossen (alhoewel ik niet zeker weet of de controle bij mysql wel werkt)

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


Verwijderd

Topicstarter
Er zijn verschillende personen in die afspraken hebben. Al deze afspraken komen in deze tabel. Het zou natuurlijk kunnen met keys. Alleen heb je dan inderdaad het eerder genoemde nadeel dat je een afspraak een minuut later kunt plannen. Ik heb een veld met daarin de begindatum en tijd van de afspraak en een veld met het aantal minuten dat de afspraak duurt. Ik weet dat je in SQL met bepaalde constraints kunt werken, maar ik weet niet of het ook hierbij kan, en of het uberhaupt met MySQL(4) kan.

  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Verwijderd schreef op 14 juni 2004 @ 10:59:
Er zijn verschillende personen in die afspraken hebben. Al deze afspraken komen in deze tabel. Het zou natuurlijk kunnen met keys. Alleen heb je dan inderdaad het eerder genoemde nadeel dat je een afspraak een minuut later kunt plannen. Ik heb een veld met daarin de begindatum en tijd van de afspraak en een veld met het aantal minuten dat de afspraak duurt. Ik weet dat je in SQL met bepaalde constraints kunt werken, maar ik weet niet of het ook hierbij kan, en of het uberhaupt met MySQL(4) kan.
In SQL kan dat, in MySQL niet.

  • Martin Sturm
  • Registratie: December 1999
  • Laatst online: 30-04 16:11
jochemd schreef op 14 juni 2004 @ 11:30:
[...]
In SQL kan dat, in MySQL niet.
In SQL kan dit niet, in een goed RDBMS kan het wel. Ik zou overwegen om over te stappen naar PostgreSQL, is ook open-source, minimaal zo snel als MySQL en ondersteunt, in tegenstelling tot MySQL wel triggers en stored-procedures. Een ander, niet-gratis, DBMS kan natuurlijk ook, zoals MSSQL, Oracle of DB2.

In MySQL is de enige optie om het toch in je applicatie te implementeren. Maar dat is natuurlijk niet ideaal.

[ Voor 12% gewijzigd door Martin Sturm op 14-06-2004 11:44 ]


  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Martin Sturm schreef op 14 juni 2004 @ 11:43:
[...]

In SQL kan dit niet, in een goed RDBMS kan het wel.
SQL is ISO/IEC 9075 en daar kan het wel degelijk in met een assertion:
NOT EXISTS (SELECT 1 FROM table A, table B WHERE (A.starttijd, A.duur) OVERLAPS (B.starttijd, B.duur) AND A.ID <> B.ID)
Ik zou overwegen om over te stappen naar PostgreSQL, is ook open-source, minimaal zo snel als MySQL en ondersteunt, in tegenstelling tot MySQL wel triggers en stored-procedures.
En wat voor deze toepassing ideaal is is dat PostgreSQL een redelijke implementatie heeft van het INTERVAL datatype waardoor je logica om overlappende vergaderingen te vinden een heel stuk makkelijker wordt. Bovenstaande syntax kan je namelijk zo in een trigger stoppen.

Verwijderd

Topicstarter
Hmm, dat klinkt goed. Ik ga me de komende tijd maar eens verdiepen in PostgreSQL.

Bedankt voor de tips!
Pagina: 1