Fremdschlüssel in Java?

ingobar

Mitglied
Hallo zusammen,

ich versuche mir gerade Java beizubringen und bin dabei jetzt auf die Arrays, Listen, etc zur Abbildung einer 1:n-Stuktur gestoßen. Warum werden die eigentlich benutzt? Ich könnte doch genauso wie bei Datenbanken mit Fremdschlüsseln arbeiten.

Ein Beispiel: Zwischen Meer und Fluss gibt es eine 1:n Beziehung. In Java schreibt man dann:

Java:
class Meer {
    private String name;
    private Fluss[] fluesse = new Fluss[10];
    //ODER
    //private ArrayList<Fluss> fluesse = new ArrayList<Fluss>();
}

class Fluss {
    private String name;
}

Warum macht man aber nicht so etwas:
Java:
class Meer {
    private String name;
}

class Fluss {
    private String name;
    private Meer meer; //Das wäre dann mein Fremdschlüssel

    public Fluss(Meer meinMeer) {
        meinMeer = meer;
    }
}

Vielen Dank für eine Erklärung,

Ingo
 
wer sagt denn, ob man das eine oder das andere macht oder machen soll?

ich würde genau das machen, was ich aktuell für besser finde (oder gar beides),
das Array ist gut, wenn man öfter vom Meer aus beginnt und alle zugehörigen Flüsse haben will,
for-Schleife über meer.getFlesse() ist schnell gemacht,

was wäre die Alternative?
for-Schleife über alle Fluesse (wer hat schon eine solche Liste?) und dann filtern ob fluss.getMeer() == aktuellesMeer?
ziemlich kompliziert

in Datenbanken hat man
- immer alle Tabellen global verfügbar
- effiziente Joins + Filter, schnell geschrieben und ausgeführt
- einzelne Variablen schreiben sich einfacher als Listen zu einem Objekt
- keine doppelten Daten/ Referenzen wichtiges Grundprinzip

in Java kann man mehr machen und Daten auch mal doppelt speichern, da erfreut man sich am einfacheren Zugriff
 
Zuletzt bearbeitet von einem Moderator:
Es kommt immer drauf an was man später suchen will.
Wenn du später einen Fluss suchst und willst wissen zu welchem Meer er gehört ist die zweite Variante die einfachere (aber auch hier musst du dann alle Flüsse in einer Liste oder einem Array haben.
Suchst du aber aber nach einem Meer und willst alle Flüsse haben ist die erste Version die sinnvollere und schneller zu durchsuchende.

Versuch mit der zweiten Version mal folgende Aufgabe zu lösen und dann überleg mal wie viele Schritte dafür nötig sind:
- Gegeben ist Fluss "Foo"
- Suche das Meer zu Fluss "Foo"
- Nehme das gefundene Meer und suche alle anderen Flüsse zu diesem Meer

Pseudocode Version 2:
Code:
for each Fluss in Array[Flüsse]
  is Fluss = "Foo"
    Meer = Fluss.Meer
    for each Fluss2 in Array[Flüsse]
      is Fluss2.Meer = Meer
        print "Ja"

Pseudocode Version 1:
Code:
for each Meer in Array[Meere]
  is new Fluss("Foo") in Meer.Array[Flüsse]
    for each Fluss in Meer.Array[Flüsse]
      print "Ja"
 

Neue Themen


Zurück
Oben