Öffnungszeiten speichern

Öffnungszeiten speichern

am 10.08.2005 15:54:05 von Jan Krumsiek

Hallo,

ich möchte in meiner Datenbank die Öffnungszeiten von Gaststätten
speichern. Das sind meist pro Tag zwei Zeitintervalle (wegen Mittagspause).

Hat jemand eine gute Idee, so etwas in einer Datenbank darzustellen?
Zuerst habe ich daran gedacht jede Start und Ende Zeit zu speichern (4
pro Tag -> 28 insgesamt). Würde eine solche Menge von Integer Werten die
Performance meiner Gaststätten-Tabelle bremsen (insgesamt sind es dann
doch recht viele Datenspalten)? Weiss jemand etwas besseres?

Die nächste Sache ist, dass mit diesen Werten auch gerechnet werden
können muss, es muss z.b. bei Suchanfragen möglich sein, nach gerade
offenen Gaststätten zu suchen.

Irgendwelche Ideen?

Grüsse,
Jan

Re: Öffnungszeiten speichern

am 10.08.2005 16:31:21 von Thomas Hamacher

Jan Krumsiek schrieb:

[Öffnungszeiten in DB]

> Hat jemand eine gute Idee, so etwas in einer Datenbank darzustellen?

Ja.

> Weiss jemand etwas besseres?

Ja.

> Irgendwelche Ideen?

Ja.

Re: Öffnungszeiten speichern

am 10.08.2005 17:04:13 von Bernhard Graeuler

Jan Krumsiek wrote:
> Hallo,
>
> ich möchte in meiner Datenbank die Öffnungszeiten von Gaststätten
> speichern. Das sind meist pro Tag zwei Zeitintervalle (wegen Mittagspause).
>
> [...]
>
> Irgendwelche Ideen?
>

Jupp. Die Intervalle zu jeder Gaststätte in eine extra Tabelle und dann
über eine eindeutige Gaststätten ID verknüpfen. Dann ist es über einen
Join möglich zu jeder Gaststätte die Öffnungszeiten zu bekommen, und
prüfen, ob eine Gaststätte gerade auf hat ist auch möglich.

PseudoBeispielSelect

select g.name, z.aufmachzeit, z.zumachzeit
from gaststaetten g,
zeiten z
where g.id = z.gid
and z.aufmachzeit < jetzt
and z.zumachzeit > jetzt

Gruß
Bernhard

Re: Öffnungszeiten speichern

am 10.08.2005 17:09:15 von Niels Braczek

Jan Krumsiek schrieb:

> Hat jemand eine gute Idee, so etwas in einer Datenbank darzustellen?
> Zuerst habe ich daran gedacht jede Start und Ende Zeit zu speichern (4
> pro Tag -> 28 insgesamt). Würde eine solche Menge von Integer Werten die
> Performance meiner Gaststätten-Tabelle bremsen (insgesamt sind es dann
> doch recht viele Datenspalten)? Weiss jemand etwas besseres?

Start- und Endezeit gehören *immer* paarweise zusammen, also gehören sie
in *einen* Datensatz.

> Die nächste Sache ist, dass mit diesen Werten auch gerechnet werden
> können muss, es muss z.b. bei Suchanfragen möglich sein, nach gerade
> offenen Gaststätten zu suchen.

Wo ist da das Problem? Insbesondere sehe ich kein PHProblem.

MfG
Niels

--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
`----------------------------------------------------------- -----´

Re: Öffnungszeiten speichern

am 10.08.2005 19:30:28 von Jan Krumsiek

Bernhard Gräuler schrieb:
> Jupp. Die Intervalle zu jeder Gaststätte in eine extra Tabelle und dann
> über eine eindeutige Gaststätten ID verknüpfen. Dann ist es über einen
> Join möglich zu jeder Gaststätte die Öffnungszeiten zu bekommen, und
> prüfen, ob eine Gaststätte gerade auf hat ist auch möglich.
>
> PseudoBeispielSelect
>
> select g.name, z.aufmachzeit, z.zumachzeit
> from gaststaetten g,
> zeiten z
> where g.id = z.gid
> and z.aufmachzeit < jetzt
> and z.zumachzeit > jetzt
>

OK sowas ähnliches hatte ich mir auch gedacht, das mit der extra Tabelle
ist ne gute Idee.
Das einzige worüber ich noch stolpere ist wenn die über Mitternacht auf
haben also z.b. aufmachzeit=19:00, zumachzeit=02:00. mir fällt irgendwie
nix ein wie man das direkt im select statement handeln kann.

Gruss,
Jan

Re: Öffnungszeiten speichern

am 10.08.2005 20:18:12 von Niels Braczek

Jan Krumsiek schrieb:

> Das einzige worüber ich noch stolpere ist wenn die über Mitternacht auf
> haben also z.b. aufmachzeit=19:00, zumachzeit=02:00. mir fällt irgendwie
> nix ein wie man das direkt im select statement handeln kann.

auf=19.00 zu=24.00
auf=00.00 zu=02.00

HTH
Niels

--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
`----------------------------------------------------------- -----´

Re: Öffnungszeitenspeichern

am 10.08.2005 20:20:41 von Sven Drieling

Jan Krumsiek wrote:

Hallo Jan,

> Das einzige worüber ich noch stolpere ist wenn die über Mitternac=
ht auf
> haben also z.b. aufmachzeit=3D19:00, zumachzeit=3D02:00. mir fällt =
irgendwie
> nix ein wie man das direkt im select statement handeln kann.

Mit 00 bis 47 Uhr also aufmachzeit=3D19:00, zumachzeit=3D26:00 arbeite=
n?


tschuess
[|8:)

Re: Öffnungszeiten speichern

am 11.08.2005 00:29:40 von Jan Krumsiek

Sven Drieling schrieb:
> Mit 00 bis 47 Uhr also aufmachzeit=19:00, zumachzeit=26:00 arbeiten?

Oh damit hast du mich auf ne gute Idee gebracht, danke sehr!

Grüsse,
Jan

Re: Öffnungszeiten speichern

am 11.08.2005 00:50:30 von Niels Braczek

Sven Drieling schrieb:
> Jan Krumsiek wrote:

>> Das einzige worüber ich noch stolpere ist wenn die über Mitternacht auf
>> haben also z.b. aufmachzeit=19:00, zumachzeit=02:00. mir fällt irgendwie
>> nix ein wie man das direkt im select statement handeln kann.
>
> Mit 00 bis 47 Uhr also aufmachzeit=19:00, zumachzeit=26:00 arbeiten?

Das versagt sofort, wenn bspw. während eines Festivals von Freitag,
17:00 bis Sonntag, 10:00 durchgängig geöffnet sein soll. Ist zwar
selten, aber warum soll man das DB-Design unnötig einschränken? Die
Variante mit Aufteilung bei Überschreitung der Tagesgrenze hat diese
Einschränkung nicht und ermöglicht zudem eine saubere Zuordnung zu
Wochentagen.

MfG
Niels

--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
`----------------------------------------------------------- -----´

Re: Öffnungszeiten speichern

am 11.08.2005 08:46:24 von Bernhard Graeuler

Niels Braczek wrote:
> Sven Drieling schrieb:
>>Jan Krumsiek wrote:
>>>Das einzige worüber ich noch stolpere ist wenn die über Mitternacht auf
>>>haben also z.b. aufmachzeit=19:00, zumachzeit=02:00.
>>>
>> Mit 00 bis 47 Uhr also aufmachzeit=19:00, zumachzeit=26:00 arbeiten?
>
> Das versagt sofort, wenn bspw. während eines Festivals von Freitag,
> 17:00 bis Sonntag, 10:00 durchgängig geöffnet sein soll. Ist zwar
> selten, aber warum soll man das DB-Design unnötig einschränken? Die
> Variante mit Aufteilung bei Überschreitung der Tagesgrenze hat diese
> Einschränkung nicht und ermöglicht zudem eine saubere Zuordnung zu
> Wochentagen.

Möglicherweise kann man sich auch von konkreten Uhrzeiten lösen, und
einfach Aufmachzeit und Zumachzeit in Sekunden oder Minuten seit
Tagesbeginn speichern. Ist relativ einfach zu berechnen, ggf. in SQL
sonst halt in PHP, man ist von den Umbrüchen weg, und kann auch über
mehrere Tage hinweg mit nur einem Intervall arbeiten.

Fr 8:00 - Fr 12:00 und
Sa 10:00 - Mo 02:00

wären dann bei Minutenberechnung:

Fr: 480 - 720 (8 * 60 bis 12 * 60) und
Sa: 480 - 2400 (8 * 60 bis (24 + 16) * 60)

Dann mußt Du Dir nur noch eine Funktion in PHP schreiben die Dir die
Anzahl der Minuten / Sekunden aus Tag und Uhrzeit berechnet.

Gruß
Bernhard

Re: Öffnungszeiten speichern

am 11.08.2005 12:31:25 von hendrik.koch

Jan Krumsiek schrieb:

>Das einzige worüber ich noch stolpere ist wenn die über Mitternacht auf
>haben also z.b. aufmachzeit=19:00, zumachzeit=02:00.

select g.name, z.anfang, z.ende
from gaststaetten g,
zeiten z
where g.id = z.gid and (
if( anfang zeit=anfang, # normale selektion
zeit>=anfang or zeit )

#anfang = oeffnungszeit
#ende = schließzeit
#zeit = aktuelle zeit



Gruß
Hendrik
--
Hendrik Koch hendrik.koch@gmx.de

Re: Öffnungszeiten speichern

am 11.08.2005 14:33:54 von Niels Braczek

Bernhard Gräuler schrieb:

> Möglicherweise kann man sich auch von konkreten Uhrzeiten lösen, und
> einfach Aufmachzeit und Zumachzeit in Sekunden oder Minuten seit
> Tagesbeginn speichern. Ist relativ einfach zu berechnen, ggf. in SQL
> sonst halt in PHP, man ist von den Umbrüchen weg, und kann auch über
> mehrere Tage hinweg mit nur einem Intervall arbeiten.
>
> Fr 8:00 - Fr 12:00 und
> Sa 10:00 - Mo 02:00
>
> wären dann bei Minutenberechnung:
>
> Fr: 480 - 720 (8 * 60 bis 12 * 60) und
> Sa: 480 - 2400 (8 * 60 bis (24 + 16) * 60)
>
> Dann mußt Du Dir nur noch eine Funktion in PHP schreiben die Dir die
> Anzahl der Minuten / Sekunden aus Tag und Uhrzeit berechnet.

Und wie findet man dann eine Kneipe, die Freitag morgens um 3 Uhr noch
auf hat?

MfG
Niels

--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
`----------------------------------------------------------- -----´

Re: Öffnungszeiten speichern

am 11.08.2005 14:46:46 von Bernhard Graeuler

Niels Braczek wrote:
> Bernhard Gräuler schrieb:
>
>
>>Möglicherweise kann man sich auch von konkreten Uhrzeiten lösen, und
>>einfach Aufmachzeit und Zumachzeit in Sekunden oder Minuten seit
>>Tagesbeginn speichern. Ist relativ einfach zu berechnen, ggf. in SQL
>>sonst halt in PHP, man ist von den Umbrüchen weg, und kann auch über
>>mehrere Tage hinweg mit nur einem Intervall arbeiten.
>>
>>Fr 8:00 - Fr 12:00 und
>>Sa 10:00 - Mo 02:00
>>
>>wären dann bei Minutenberechnung:
>>
>>Fr: 480 - 720 (8 * 60 bis 12 * 60) und
>>Sa: 480 - 2400 (8 * 60 bis (24 + 16) * 60)
>>
>>Dann mußt Du Dir nur noch eine Funktion in PHP schreiben die Dir die
>>Anzahl der Minuten / Sekunden aus Tag und Uhrzeit berechnet.
>
>
> Und wie findet man dann eine Kneipe, die Freitag morgens um 3 Uhr noch
> auf hat?
>
> MfG
> Niels
>

Naja, man speichert halt den Aufmachtag, das musste man bei den anderen
ja auch. Man sucht also nach Kneipen die Freitag aufmachen, und die...

Ok. Du hast mich. :-)

Gott sei Dank habe ich "Möglicherweise..." gescrieben.

Gruß
Bernhard

Re: Öffnungszeitenspeichern

am 11.08.2005 14:49:32 von Andreas Froede

Jan Krumsiek wrote:
> Zuerst habe ich daran gedacht jede Start und Ende Zeit zu speichern (4
> pro Tag -> 28 insgesamt). Würde eine solche Menge von Integer Werten die

Wo siehst Du hier Mengen?

> Irgendwelche Ideen?

CREATE TABLE kneipe (
id INT PRIMARY KEY,
...
)
CREATE TABLE zeit (
kid INT NOT NULL REFERENCES kneipe ON DELETE CASCADE,
von time NOT NULL,
dauer interval NOT NULL CHECK (dauer < interval '24 hours'),
UNIQUE (kid, von)
)

> Die nächste Sache ist, dass mit diesen Werten auch gerechnet werden
> können muss, es muss z.b. bei Suchanfragen möglich sein, nach gerade
> offenen Gaststätten zu suchen.

SELECT k.*,z.von, z.von + z.dauer AS zu
FROM kneipe k, zeit z
WHERE now() >= von AND now()-von < zeit

CIAO
andreas
--
Klettermailingliste Jena: http://www.wand.spider-net.de/mailing
Klettern in Thüringen: http://www.climb.spider-net.de
Kletterhalle in Jena: http://www.wand.spider-net.de

Re: Öffnungszeiten speichern

am 12.08.2005 11:45:34 von Ulf Kadner

Jan Krumsiek schrieb:

> ich möchte in meiner Datenbank die Öffnungszeiten von Gaststätten
> speichern. Das sind meist pro Tag zwei Zeitintervalle (wegen Mittagspause).

Hallo Jan!

Bist Du Dir sicher das Du unter "Gaststätte" das selbe verstehst wie
andere? Ich frag nur weil ich mir nicht vorstellen kann das ein
Gastaettenbetreiber so dumm sein kann zu Mittag zu zu machen...

MfG, Ulf

Re: Öffnungszeitenspeichern

am 24.08.2005 18:05:30 von Peter Jensen

Jan Krumsiek wrote:

> ich möchte in meiner Datenbank die Öffnungszeiten von Gaststätten
> speichern. Das sind meist pro Tag zwei Zeitintervalle (wegen


=:) : Die Kneipen dürfen ab sofort nur noch auf- und zu machen zu folgenden
Uhrzeiten: Volle Stunde, Viertel Nach, Halb, Viertel vor.

Kneipe zu = *
Kneipe auf = o

Ergibt pro Tag 24 *4 = 96 Zeichen (in einer Zeichenkette)

Beispiel:
Montag ist Ruhetag, Dienstag ist von 11:15 bis 14:30 offen.
was (...) bedeutet, kannst Du Dir denken.

0 1 2 10 11 12 13 14 24
Montag: **** **** **** (...) **** **** **** **** **** ... ****
Dienstag: **** **** **** (...) **** *ooo oooo oooo oo** ... ****
Undsoweiter.

Du hast dann für sämtliche Kneipen immer:
7 Zeichenketten (für 7 Tage) mit jeweils 96 Zeichen.
Müsste doch relativ einfach darstellbar sein, zumindest, wenn die Zeichern
besser gwählt werden :). Und wenn die Kneipe über Nacht auf hat,
funktioniert es trotzdem.


mfg, P. Jensen

Re: Öffnungszeitenspeichern

am 24.08.2005 21:46:28 von Michael Vogel

Jan Krumsiek wrote:

> ich möchte in meiner Datenbank die Öffnungszeiten von Gaststätten
> speichern. Das sind meist pro Tag zwei Zeitintervalle (wegen Mittagspause).

Meistens - ist aber nicht gesagt, dass es immer so ist.

> Hat jemand eine gute Idee, so etwas in einer Datenbank darzustellen?

Klar. Du nimmst dafür zwei Tabellen:

Tabelle "Gaststätte":
ID - Integer
Name - Name der Gaststätte
Adresse - ....

Primärkey: ID

Tabelle "Öffnungszeiten":
Gaststätte - Integer (die "ID" aus "Gaststätte")
Wochentag - Integer (1-7)
Sonderdatum - Datum
Geöffnet von - Uhrzeit
Geöffnet bis - Uhrzeit

Primärkey: Gaststätte, Wochentag, Sonderdatum

Im Sonderdatum trägst Du Daten wie Feiertage ein - da unterscheiden sich
ja schließlich die Öffnungszeiten u.U. von den sonstigen Daten.

Die Abfrage, ob die Gaststätte geöffnet ist, ist ganz leicht. Du musst
einfach nur nachschauen, ob du eine Gaststätte hast, bei der der
aktuelle Wochentag dem Wochentag der Tabelle entspricht und die
Wunschuhrzeit zwischen "Geöffnet von" und "Geöffnet bis" liegt.

Danach kommt die zweite Abfrage, ob es für den Tag evtl. eine
Sonderregelung gibt.

Falls es Sonderregelungen geben sollte wie: "Jeder erste Dienstag im
Monat", könnte das als Wochentag "12" kodiert werden (1. Dienstag,
Dienstag=2), etc.

> Zuerst habe ich daran gedacht jede Start und Ende Zeit zu speichern (4
> pro Tag -> 28 insgesamt). Würde eine solche Menge von Integer Werten die
> Performance meiner Gaststätten-Tabelle bremsen (insgesamt sind es dann
> doch recht viele Datenspalten)? Weiss jemand etwas besseres?

1. Regel des Datenbankdesigns: Niemals von endlichen Werte ausgehen. Ein
"Jede Gaststätte hat eigentlich nur 2 Öffnungszeiten pro Tag" kann ganz
leicht mal daneben gehen.

Und selbst wenn ein Kunde steif und fest behauptet: "Da gibt es niemals
mehr als diese zwei Werte", so wirst Du irgendwann eine Ausnahme finden,
wo der Kunde dann sagt: "Naja, aber das passiert doch fast nie". Kunden
begreifen im Allgemeinen nicht, dass in der EDV der Sonderfall genauso
behandelt werden muss wie der Regelfall.

Tschau!

Michael
--
"The Macintosh may only have 10% of the market,
but it is clearly the top 10%" - Douglas Adams 1952-2001