# Entity Realtionship Model erstellen



## Gast (28. Sep 2008)

Hallo,

ich habe die Aufgabe, eine Fahrplan mittels Datenbank abzubilden, also Zugname, Zugnummer, Start, Ziel, Ankunftszeit, Abfahrtszeit und aktuellen Ort so abzuspeichern, damit die Abfragen möglichst einfach werden,

Jetzt hab ich es mal mit einer Tabelle versucht, was aber keinen Sinn macht:


```
Nummer    Name    Start       Ziel               Ankunftszeit         Abfahrtszeit       aktueller Ort
2               xy         Berlin    München          null                        8:40                  Berlin         
2               xy         Berlin    München          10:30                     10:40                Hamburg
2               xy         Berlin    München          11:22                     11:33                Dortmund
2               xy         Berlin    München          15:30                     15:35                Nürnberg
2               xy         Berlin    München          17:10                     null                   München
```

Da dies keinen Sinn macht, habe ich es mal mit 3 Tabellen versucht -> Zug, Fahrplan und Reihenfolge,

Also in der Tabelle Zug speichere ich alles, was zu einem Zug gehört + ID, in der Fahrplantabelle speichere ich Ankunftszeit, Abfahrtszeit und wieder eine ID und diese ID ist der Foreignkey für die Tabelle Zug und zwischen den beiden Tabellen schalte ich noch eine Tabelle, welche mir die Reihenfolge der aktuellen Orte angibt,

Macht das eurer Meinung nach so Sinn, oder wäre ein anderer Ansatz besser,

lg


----------



## DocRandom (28. Sep 2008)

Moin!

Ich würde für die Zuege und Haltestellen je eine Tabelle erstellen.
Für den Fahrbetrieb eine eigene, die jeweils per Relation auf die beiden Tabellen verweist.

Also in etwa so:
Table Train:
ID -> Primary Key
Name -> Name
alles was sonst noch zum Zug gehört
Table Station:
ID -> Primary Key
Name -> 
weitere Attribute zur Station
Table RoadMap:
ID -> Primary Key
Train-ID -> Zug
Station-ID -> Station
Ankunft -> Date/Time
Abfahrt -> Date/Time

lg
DocRandom


----------



## MQue (28. Sep 2008)

Ich habs mal so designed,  
bin für jede Kritik offen, vor allem was die verbindungen zwischen den Entitys angeht


----------



## Guest (29. Sep 2008)

Kann da wer sagen, ob dieses Diagramm oben ok wäre,


----------



## maki (29. Sep 2008)

Ist nicht ok.
Normalisier dass doch mal.


----------



## Guest (29. Sep 2008)

maki hat gesagt.:
			
		

> Ist nicht ok.
> Normalisier dass doch mal.




Aha, und was heißt das dann konkret? was kann ich da noch machen, ich vermute mal du meinst die 3 Normalformen,
die Daten sollen atomar sein usw.!!??


----------



## Guest (30. Sep 2008)

Also leider keine Kommentare mehr?


----------



## maki (30. Sep 2008)

Schon mal gesucht? google etc. sind voll von Infos, du musst es ja nicht gleich in die 7. Normalform (ja, die gibt es auch) bringen, aber ein bisschen eingeninitiative solltest du schon zeigen.

Relationship 2 ist seltsam bzw. nicht ausfühhlich genug, die Tabelle Roadmap ist auch seltsam...

Sammle doch erstmal alle Nomen dass du zumindest einen Überblick über die notwendigen Entitäten zu bekommen.


----------



## Guest (2. Okt 2008)

DocRandom hat gesagt.:
			
		

> Moin!
> 
> Ich würde für die Zuege und Haltestellen je eine Tabelle erstellen.
> Für den Fahrbetrieb eine eigene, die jeweils per Relation auf die beiden Tabellen verweist.
> ...




wie könnte ich dann in den oberen Tabellen z.B.: den Fahrplan des Zuges "Goethe" von Berlin nach München abfragen, sodass ich die einzelnen Stationen aufgelistet bekomme?


----------



## kama (2. Okt 2008)

Hallo,

@Michael1234
warum heißt der Primärschlüssel in den Tabellen nicht einfach "ID"? Und warum setzt Du meistens vor die Attribute noch den Tabellen (Entity) namen davor?

Sieht später die Klasse auch so aus?

```
public class Train {
    private Long train_id;
    private String trainName;
...
}
```
Ich würde eher vermuten, dass Deine Klassen später so aussehen:

```
public class Train {
    private Long id;
    private String name;
...
}
```
Oder machst Du das auch später in den Datenbank Tabellen auch so?
In der Tabelle TRAIN eine Spalter "TRAIN_NAME" ? 


Wenn Du nachher mit z.B. Hibernate arbeitest verkompliziert das die Arbeit nur.

MfG
karl Heinz Marbaise


----------



## Guest (2. Okt 2008)

Mir wäre es mehr um die Abfrage gegangen, vielleicht kann sich ja noch jemand entschließen


----------



## kama (2. Okt 2008)

Hallo,

Tja ...
	
	
	
	





```
CREATE TABLE TRAIN (
  ID bigint not null,
  NAME VARCHAR(255)
);

CREATE TABLE STATION (
  ID bigint not null,
  NAME VARCHAR(255)
);

CREATE TABLE FROMTO (
  ID bigint not null,
  FK_TRAIN BIGINT not null,
  START VARCHAR(255),
  ZIEL VARCHAR(255)
);

CREATE TABLE ROADMAP (
  ID bigint not null,
  FK_TRAIN BIGINT not null,
  FK_STATION BIGINT NOT NULL,
  ABFAHRT TIMESTAMP,
  ANKUNFT TIMESTAMP
);

insert into fromto (Id, FK_TRAIN, START, ZIEL) values (1, 1, 'Berlin', 'München');
insert into fromto (Id, FK_TRAIN, START, ZIEL) values (2, 2, 'Aachen', 'Frankfurt');

insert into train (Id, name) values (1, 'Goethe');
insert into train (Id, name) values (2, 'Braun');

insert into station (Id, name) values (1, 'München');
insert into station (Id, name) values (2, 'Frankfurt');
insert into station (Id, name) values (3, 'Stuttgart');
insert into station (Id, name) values (4, 'Berlin');
insert into station (Id, name) values (5, 'Aachen');
insert into station (Id, name) values (6, 'Köln');
insert into station (Id, name) values (7, 'Siegburg');
insert into station (Id, name) values (8, 'Mannheim');

-- Strecke von Berlin nach München
--   1. Berlin
--   2. Frankfurt
--   3. München
insert into roadmap (id, FK_TRAIN, FK_STATION, ABFAHRT, ANKUNFT) values (1, 1, 4, '2008-01-01 12:00:00.000000', '2008-01-01 11:55:00.000000');
insert into roadmap (id, FK_TRAIN, FK_STATION, ABFAHRT, ANKUNFT) values (2, 1, 2, '2008-01-01 14:50:00.000000', '2008-01-01 14:45:00.000000');
insert into roadmap (id, FK_TRAIN, FK_STATION, ABFAHRT, ANKUNFT) values (3, 1, 1, '2008-01-01 17:17:00.000000', '2008-01-01 17:12:00.000000');
-- Strecke Aachen Frankfurt
insert into roadmap (id, FK_TRAIN, FK_STATION, ABFAHRT, ANKUNFT) values (1, 2, 5, '2008-01-01 08:39:00.000000', '2008-01-01 08:36:00.000000');
insert into roadmap (id, FK_TRAIN, FK_STATION, ABFAHRT, ANKUNFT) values (2, 2, 6, '2008-01-01 09:15:00.000000', '2008-01-01 09:19:00.000000');
insert into roadmap (id, FK_TRAIN, FK_STATION, ABFAHRT, ANKUNFT) values (3, 2, 7, '2008-01-01 09:40:00.000000', '2008-01-01 09:36:00.000000');
insert into roadmap (id, FK_TRAIN, FK_STATION, ABFAHRT, ANKUNFT) values (3, 2, 2, '2008-01-01 10:30:00.000000', '2008-01-01 10:27:00.000000');


select 
        T.NAME AS ZugName,
        S.NAME AS STATION, 
        R.ABFAHRT AS ABFAHRT, 
        R.ANKUNFT AS ANKUNF 
    from
        FROMTO F,
        train T, 
        station S, 
        roadmap R
    where
            F.START = 'Berlin'
        AND F.ZIEL = 'München'
        AND F.FK_TRAIN = R.FK_TRAIN
        AND R.FK_TRAIN = T.ID
        AND R.FK_STATION = S.ID
    order by R.ANKUNFT ASC;
```
Der Erste Versuch ist am Punkt, wo ich die Abfrage zusammen gebaut habe (OHNE FROMTO Tabelle) gescheitert...das wird richtig Kompliziert.....mit einer Weiteren Tabelle (FROMTO) wird das Ganze ein wenig einfacher....Da benötige ich nur noch Start und Ziel....

MfG
Karl Heinz Marbaise


----------

