PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MySQL Datenbank design...



Dodge
18.08.03, 21:30
Servus! Ich mach mich gerade daran eine Anwendung zur Lagerverwaltung in einer Disco zu schreiben. Die Datenhaltung soll in einer MySQL Datenbank erfolgen. Die Disco hat mehere Theken (logisch). Für jede Theke soll ein eigener Lagerbestand gelten (wieder logisch, sonst machts ja keinen Sinn). Leider gestaltet sich dann die Datenbank ziemlich kompliziert, zumindest was so meine ersten Versuche damit angeht, denn es soll auch möglich sein Theken zu löschen oder neue zu erstellen.

Als Ausgabe möchte ich folgendes haben:

ID | Name | Bestand Bar 1 | Bestand Bar 2 | Bestand Bar ... |
-----------------------------------------------------------------------------------------------
323 | 1 Fl. Cola | 3 | 5 | 7
356 | 1 Fl O-Saft | 5 | 4 | 3
.
.
.

Es muss nicht alles hundertprozentig normalisiert sein, auch ein bischen Redundanz
macht mir offiziell nix aus (ist zwar blöd aber man muss es immer im Verhältnis zum
Aufwand setzen).

Folgende Tabellen hab ich mir überlegt:

BarTable
BarID tinyint(3)
BarName char(32)

DrinkTable
DrinkID tinyint(4)
Name char(32)

StockTable
BarID tinyint(3)
DrinkID tinyint(4)
Stock tinyint(5)

#########################################

- ->In BarTable steht nur die Zuordnung zwischen ID und Name der Bar.
- ->In DrinkTable steht nur die Zuordnung zwischen ID und "Getränk".
- ->In StockTable steht dann eben alles was den Lagerbestand
angeht. BarID referenziert dann wieder die Bar. DrinkID referenziert auf
Name und dann eben mit Stock den aktuellen Bestand.


Was ich jetzt am besten über einen SELECT haben will ist folgendes:
- -> Alphabetisch nach NameOfDrink
- -> Für alle Getränke die es gibt
- -> Für alle Bars die es gibt

Wenn einer ne Idee für einen Select hat: BITTE POSTEN... Danke!

Stage
18.08.03, 22:21
vieleicht so

select Name from DrinkTable,Bartable,Stocktable where BarTable.BarID=StockTable.BarID and DrinkTable.DrinkID=StockTable.DrinkID order by Name;

Edit: wenn nötig noch ein group by DrinkTable.DrinkID mit einbauen

Dodge
18.08.03, 22:51
Naja, nicht so ganz. Ich geb zu, es ist vielleicht etwas verwirrend:
Die DB soll folgendes zurückgeben:

DrinkID | Name des Getränks | Bestand Bar1 | Bestand Bar2 | Bestand Bar3 ...

Ich will das halt in der Anwendung in einem Gitter darstellen und hätte das
aus Gründen der Applikationsperformance am liebsten mit einer SQL Abfrage und
nicht mit n = Anzahl der Bars.

Bis jetzt kann ich das eben nur so einigermaßen für jede Bar extra:

SELECT d.DrinkID, d.Name, s.Stock FROM BarTable b, DrinkTable d, StockTable s
WHERE d.DrinkID = s.DrinkID AND b.BarID = s.BarID AND b.BarID = 1"

...

Jasper
18.08.03, 23:49
Original geschrieben von Dodge
Naja, nicht so ganz. Ich geb zu, es ist vielleicht etwas verwirrend:
Die DB soll folgendes zurückgeben:

DrinkID | Name des Getränks | Bestand Bar1 | Bestand Bar2 | Bestand Bar3 ...

Ich will das halt in der Anwendung in einem Gitter darstellen und hätte das
aus Gründen der Applikationsperformance am liebsten mit einer SQL Abfrage und
nicht mit n = Anzahl der Bars.

Bis jetzt kann ich das eben nur so einigermaßen für jede Bar extra:

SELECT d.DrinkID, d.Name, s.Stock FROM BarTable b, DrinkTable d, StockTable s
WHERE d.DrinkID = s.DrinkID AND b.BarID = s.BarID AND b.BarID = 1"

...

die daten erhältst du mit

select d.name, b.name, s.stock
from stock s, drinks d, bars b
where d.id = s.drink and b.id = s.bar;

die von dir gewünschte darstellung ist AFAIK mit mysql nicht möglich (da fehlt union oder subselects).

-j