PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datenbankdesign, Zählerstände verschiedener Wohnungen..


Mike
2005-01-08, 23:28:27
Ich bin gerade dabei, ein Programm zur Verwaltung der Häuser/Wohnungen zu schreiben, die wir vermieten.
Genauer soll man da die Zählerstände etc eingeben, und es erstellt dann die Abrechnung, die man nur noch drucken muss.

Ich mache mir im Moment noch Gedanken, wie ich die Zählerstände in der Datenbank(MySQL) speichere. Ich muss dazusagen, dass das meine erste Arbeit mit richtigen relationalen Datebnbanken ist.

Hätte man nur einen Wohnungstyp, daher hätten alle Wohnungen die gleichen Zähler, könnte man eine Tabelle mit den entsprechenden Spalten nehmen.

Ich habe aber mehrere verschiedene Typen von Wohnungen, einige haben zB. einen Warmwasser- und einen Wärmezähler, andere haben stattdessen einen Gaszähler..

Eine Option wäre wieder, alles in einer Tabelle zu speichern.
Das würde aber den Nachteil haben, dass viele Spalten NULL enthalten würden, was ja eigentlich Speicherplatzverschwendung ist.

Eine zweite Option wäre, für jeden Wohnungstyp eine eigene Tabelle zu erstellen.
Da würden dann keine NULLs mehr vorkommen, allerdings würde das in vielen ähnlichen Tabellen mit vielen übereinstimmenden Spalten führen.

Eine dritte Option wäre, für jeden Zählertyp eine eigene Tabelle zu erstellen.
Jeder Wohnungstyp benutzt dann halt die Tabellen, die er brauch.
Dies benötigt erstens auch viel Speicherplatz, da in jeder Tabelle ja ein Index vorhanden sein muss, zweitens werden Queries auch ziemlich lang und kompliziert.

Falls also jemand Erfahrungen mit Datenbanken hat, ich bin für jede Meinung dankbar :)

MadMan2k
2005-01-08, 23:36:33
http://de.wikipedia.org/wiki/Normalisierung_%28Datenbank%29

ich würde die dritte Variante nehmen. :)

Mike
2005-01-09, 00:31:34
http://de.wikipedia.org/wiki/Normalisierung_%28Datenbank%29

ich würde die dritte Variante nehmen. :)

Hm, also die Normalformen habe ich mir schonmal angesehen. Müssten aber eigentlich alle 3 Methoden konform zu den Normalformen sein.

HellHorse
2005-01-09, 10:09:50
Eine Option wäre wieder, alles in einer Tabelle zu speichern.
Das würde aber den Nachteil haben, dass viele Spalten NULL enthalten würden, was ja eigentlich Speicherplatzverschwendung ist.
Schlechtes Desingn.

Eine zweite Option wäre, für jeden Wohnungstyp eine eigene Tabelle zu erstellen.
Da würden dann keine NULLs mehr vorkommen, allerdings würde das in vielen ähnlichen Tabellen mit vielen übereinstimmenden Spalten führen.
Schon mal von Vererbung gehört?

Eine dritte Option wäre, für jeden Zählertyp eine eigene Tabelle zu erstellen.
Jeder Wohnungstyp benutzt dann halt die Tabellen, die er brauch.
Dies benötigt erstens auch viel Speicherplatz, da in jeder Tabelle ja ein Index vorhanden sein muss, zweitens werden Queries auch ziemlich lang und kompliziert.
Bah, wegen diesen 32bit. Wir leben nicht im Jahr 1960 und es würde mich nicht wundern, wenn dein gesamtes Datenvolumen unter 10 MB ist. Für etwas zu optimieren, was kein Problem ist, ist nicht sehr clever um es mal so auszudrücken.

Kommt darauf an wie es aussieht. Falls du wirklich verschiedene Wohnungstypen hast, dann Vererbung. Wenn jede Wohnung einen Warmwasser-, Wäre- und Gaszähler haben kann und die "Typen" bloss Kombinationen davon sind, dann Lösung 3.

Mike
2005-01-09, 12:42:18
Schlechtes Desingn.
Dachte ich mir :)
Schon mal von Vererbung gehört?
Ja, allerdings nur die Vererbung bezogen auf Klassen.

Bah, wegen diesen 32bit. Wir leben nicht im Jahr 1960 und es würde mich nicht wundern, wenn dein gesamtes Datenvolumen unter 10 MB ist. Für etwas zu optimieren, was kein Problem ist, ist nicht sehr clever um es mal so auszudrücken. Nein, mit 32Bit hab ich kein Problem :)
Ich habe an die Lösung gedacht, weil sie halt ne Menge ähnliche Tabellen vermeidet, also Tabellen, die sich zB nur in einer Spalte unterscheiden, weil zB. ein Wohnungstyp ein Wasserzähler mehr hat, als ein anderer Typ.

Kommt darauf an wie es aussieht. Falls du wirklich verschiedene Wohnungstypen hast, dann Vererbung. Wenn jede Wohnung einen Warmwasser-, Wäre- und Gaszähler haben kann und die "Typen" bloss Kombinationen davon sind, dann Lösung 3.

Konkret:
1. Wohnungstyp: 1 Gaszähler, 1 Wasserzähler
2. Typ: 1 Gaszähler, 2 Wasserzähler
3. Typ: 2 Wasserzähler, 2 Warmwasserzähler
4. Typ: 1 Wärmezähler, 2 Wasserzähler, 1 Warmwasserzähler

Falls ich Option 3 nehme, müsste ich auch für jeden Wasserzähler ne eigene Tabelle machen, also 4 Tabellen für die Wasserzähler(2x Warm, 2x Kalt).
Dazu käme eine Tabelle für den Wärmezahler, und eine für den Gaszähler.
Außerdem dachte ich bei Option 3 an eine Tabelle der Form id | Wohnung | Abrechnungsdatum
Dann müsste ich in jeder Zählertabelle statt Wohnung und Datum nur noch die ID Speichern, als Foreign Key zu der Tabelle id/wohnung/datum (währe dann auch Primary Key in den Zählertabellen).

Minos
2005-01-09, 13:02:13
mach doch ne mischung zwischen 2. und 3.:

1. eine tabelle mit allen wohnungen id | Wohnung | Abrechnungsdatum | typ 1-4 | id in der entsprechenden tabelle

2.-5. für jeden wohnungstyp die entsprechende tabelle, so ist das ganze net so kompliziert und hat auch kaum nachteile.

Mike
2005-01-10, 15:48:09
mach doch ne mischung zwischen 2. und 3.:

1. eine tabelle mit allen wohnungen id | Wohnung | Abrechnungsdatum | typ 1-4 | id in der entsprechenden tabelle

2.-5. für jeden wohnungstyp die entsprechende tabelle, so ist das ganze net so kompliziert und hat auch kaum nachteile.


also, die Wohnungen haben ja schon ne Tabelle, der Typ steht da drin.

Und das Abrechnungsdatum kann da ja nicht rein, da muss ja für jeden Datensatz ein Datum gespeichert werden...