# 2 Tabellen matchen



## Guest (30. Okt 2006)

Hallo zusammen

ich hoffe das ich Euch diese Frage auch stellen kann, es geht um eine rein SQL spezifische Frage, da ich aber mit Java antworte und oft in dieses Forum poste, habe ich gedacht, ich versuch es trotzdem mal hier. 

Mein Problem ist folgendes, ich habe eine Tabelle Raum, mit raumID, raumNr., raumGroesse... und ich möchte eine andere Tabelle Jahr generieren, welche das Jahr, die Monate und die Tage eines Jahres abgebildet. 

Ich möchte nun die Tabellen so zusammen matchen, dass jeder raumNr. eine Tabelle Jahr zugeordnet wird. Also zum Beispiel habe ich raumNr. 201 und 301 und diesen möchte ich jeweils ein Jahr zuordnen, geht das? 
Irgendwie habe ich ein bisschen ein Knoten? Ich hatte vor einiger Zeit einmal MYSQL im Studium und mit den grundlegenden SELECT, INSERT Statements klappt es...aber mehr irgenwie nicht. 

Kann mir jemand helfen, bzw. Tipps geben?

Besten Dank

JavaLight


----------



## thE_29 (30. Okt 2006)

Weißt du überhaupt was du willst?

Hat die Tabelle Raum schon eine Spalte für das Jahr?

Welche Datenbank?


----------



## Guest (30. Okt 2006)

Ich arbeite mit MySQL, die Verbinndung etc. klappt alles...
Hmmm...ja, ich weiss schon was ich möchte.
Ich möchte eine Buchung erstellen. 
So habe ich mir das vorgestellt, ich hinterlege pro Raum ein Jahr und zusätzlich ein Vermerk gebucht (Ja / Nein). Standardmässig ist dann pro Tag der Vermerk auf Nein für dieses Zimmer gesetzt. Sobald ich nun eine Buchung mache, für einen bestimmten Tag pro Zimmer, wird der Vermerk mit einem Update Statement auf ja gesetzt.


Wieviele Tabellen bräuchte ich da? Wie muss ich vorgehen? Programmiertechnisch habe ich keine Probleme, aber mit dem MySQL?

Danke für Eure Hilfen...

Gruss...JavaLight


----------



## thE_29 (30. Okt 2006)

Naja, du musst deine Tabelle erweitern...

Kannst du den Insert Statements?!

Tabelle erweitern mit den Spalten die du willst und dann einfache Insert Statements..


----------



## Guest (30. Okt 2006)

Insert Statements sind kein Problem...was ich mich ein wenig Frage ist, wie müssen überhaupt die Tabellen aussehen. Und wie muss ich Sie dann matchen, ich meine ich kann nicht die Räume und das Jahr in einer Tabelle haben, oder? Dazu brauche ich mehrere, kann mir da jemand mit der Struktur ein wenig helfen?

Danke...und bis später


----------



## thE_29 (30. Okt 2006)

Naja, der Tabelle raum fügst eine JahrID hinzu!

Und die Tabelle Jahr, hat eine JahrID + die zusätzlichen Spalten!

Bei der Tabelle raum ist das ein Foreign Key und bei Jahr ist dass der Primary Key!

Wenn du nicht weißt wie man sowas in eine Beziehung stellt, isses immer noch am besten, einen Bleistift + Zettel zu nehmen und es aufzuzeichnen!

Die Tabellen sollten halt nur das tun, wozu sie da sind (Raum für grobe Raumdinge und nix für Jahre)

Und dann musst du das ganze "Verknüpfen" mit einer möglichst kleinen Datenredundanz (dh, das net in 5 Tabellen fast das gleiche drinnen steht).


----------



## Guest (30. Okt 2006)

Hallo The29 und alle anderen

Ich habe jetzt mal ein wenig mein Grips zusammengelert und folgende Überlegungen angestellt:

1. Tabelle: Raum --> besteht aus RoomId, RoomNumber, RoomGroesse
2. Tabelle: Jahr --> besteht aus TagesID (hat 365 oder 366 je nach Jahr),  Jahresablauf(bsp. 1.1.2006 - 31.12.2006)
3. Tabelle: Buchung --> besteht aus RoomID, TagesID, Gebucht( J / N )

Meine erste Frage, ist das korrekt so? Würdert Ihr das auch so machen? Wie könnte ich es besser machen? Wie kann ich erreichen das dass gebucht (J / N ) erreicht wird, muss ich dazu jeweils im Programm aus dem Datum eine TagesID errechnen und dann UPDATE RoomId, TagesID, Gebucht z.B. (101 , 165, J)?  :?: 

Kann mir da noch jemand helfen?

Besten Dank für Deine tollen Hilfestellungen (The29)


----------



## Guest (31. Okt 2006)

Kann mir niemand bei meinem aktuellen Problem helfen? Ich bitte Euch ansonsten komme ich nicht mehr weiter...

Freundliche Grüsse

Roger


----------



## dercheffe (31. Okt 2006)

> Wie kann ich erreichen das dass gebucht (J / N ) erreicht wird, muss ich dazu jeweils im Programm aus dem Datum eine
> TagesID errechnen und dann UPDATE RoomId, TagesID, Gebucht z.B. (101 , 165, J)? icon_question.gif



Leider versteh ich die Frage nicht. Die Tabellen sind schon gut so. Dann hast du ne tabelle Raum


```
//Tabelle Raum

RoomID| RoomNumber |RoomGröße|
----------------------------
   1  |      1   | 25        |
----------------------------
   2  |      2    |  21      |
-----------------------------
   3  |       3   |  25      |
-----------------------------


//Tabelle  Jahr

TagesID | Jahresablauf        |
--------------------------------
1       |1.1.2006 - 31.12.2006|
--------------------------------
2       |1.1.2006 - 31.12.2006|


//Tabelle Buchung

RoomID|TagesID|gebucht
------------------------
 1     |    1  |    true
------------------------
 1     |   2   |   false
-------------------------
```

wo is jetzt das Problem? du kanns überall was mit insert einfügen und mit update aktualisieren.  Ist es bei jahr nicht besser anstatt jahresablauf einfach nur des jahr einzuschrieben?

willst du jetzt wissen ob ein Raum zu einem Tag belegt ist
SELECT belegt FROM buchung WHERE tagesid = 
also stink normales sql

[/code]


----------



## Guest (31. Okt 2006)

Danke für Deine Antwort. Sorry..ich habe es vielleicht ein wenig kompliziert erklärt, ich versuche nun es eifacher zu erklären. 
Ich brauche doch theoretisch in der Tabelle Jahr, den Jahresablauf, also jeden Tag des Jahres vom 1.1.2006 bis zum 31.12.2006? Das bedeutet doch ich brauche pro Jahr 365 bzw. 366 Tages ID's? Ist das korrekt?

Das bedeutet wiederum das ich in der Tabelle Buchung Pro Zimmernummer pro Jahr, jeweils 365 bzw. 366 Einträge habe, oder? 

Noch eine andere Frage, gibt es eine eifache Lösung, z.b. 10 Jahre in der Datenbank zu erfassen. Ich habe ein bisschen Mühe damit 3650 einzugeben.

Freundliche Grüsse

Roger


----------



## dercheffe (31. Okt 2006)

Anonymous hat gesagt.:
			
		

> Danke für Deine Antwort. Sorry..ich habe es vielleicht ein wenig kompliziert erklärt, ich versuche nun es eifacher zu erklären.
> Ich brauche doch theoretisch in der Tabelle Jahr, den Jahresablauf, also jeden Tag des Jahres vom 1.1.2006 bis zum 31.12.2006? Das bedeutet doch ich brauche pro Jahr 365 bzw. 366 Tages ID's? Ist das korrekt?



ja



			
				Anonymous hat gesagt.:
			
		

> Das bedeutet wiederum das ich in der Tabelle Buchung Pro Zimmernummer pro Jahr, jeweils 365 bzw. 366 Einträge habe, oder?



ja



			
				Anonymous hat gesagt.:
			
		

> Noch eine andere Frage, gibt es eine eifache Lösung, z.b. 10 Jahre in der Datenbank zu erfassen. Ich habe ein bisschen Mühe damit 3650 einzugeben.



ja 
schreib doch ein programm mit ner for schleife um die daten zu füllen

Gruß
Christoph


----------



## thE_29 (31. Okt 2006)

Du willst also ein gebucht für jeden Tag?!

Dann würde ich das anders lösen und zwar mit nem varchar Feld 

Mache ein varchar Feld mit länge 366 und ja nachdem ob es gebuchst ist, steht an der Position von dem String ein J oder ein N!

Ist zwar nicht gerade eine schöne Art aber bevor ich 365 Spalten mache, mache ich sowas ...

Am Anfang ist halt alles mit N´s befühlt..

Im Programm musst du halt das einbauen, das wenn der 3.2. auf gebucht gesetzt wird, eigentlich die Position 34 im String auf J gesetzt wird..


----------

