SqliteStudio Fremdschlüssel

vikil

Aktives Mitglied
Hallo zusammen,
habe wieder mal ein Problem.:shock:;)
Ich habe vor datensätze in SQLITE DB zu speicher.
Es funktioniet auch soweit.

habe mit SQLITESTUDIO mehrere TAbellen angelegt. Jede Tabelle hat eine Primär ID.
Diese einzelne Tabellen will ich in einer Hauptabelle zusammenfassen.->
Die Haupttabelle hat auch eine Primär ID und Fremdschlüssel(Primär ID von untertabellen) von den anderen Tabellen.

Mein Problem ist
wenn ich Datensätze in die Untertabelle ablege, müssen diese ja uch in Hauptabelle über Fremdschlüssel angelegt werden, oder?
oder habe ich ein Denkfehler. Habe auch gelesen das SQLITE Fremdschlüssel nicht interstützt. Stimmt es?
Es werden bei mir aber Datensätze nur in der jeweiliger Tabelle abgelegt!

DANKE im Voraus
 

Joose

Top Contributor
Nein hier hast du einen Denkfehler! Es wird nur das angelegt was du anlegen willst.
Wenn du allerdings in der "Hauptabelle" eine Datensatz anlegen willst geht das nur wenn die entsprechenden Datensätze in der "Untertabelle" vorhanden sind.
Die "Untertabellen" kannst du aber mit soviel Daten füttern wie du willst.

SQLite unterstützt Fremdschlüssel sehr wohl, bitte bei sowas am Besten auch immer einen Link bzw. eine Anmerkung posten woher diese Annahmen kommen.
 
Zuletzt bearbeitet:

vikil

Aktives Mitglied
Hallo Joose,
danke erstmal für die schnelle Antwort.
Stehe irgendwie auf dem Schaluch!
Wenn ich die Datensätze in die Untertabelle abgelegt habe, wie kommen die Daten (Fremdschlüssel) in die Haupttabelle.
Damit ich weiss welche datensätze von unterschiedlichen Tabellen zusammen gehören?
 
Zuletzt bearbeitet:

Joose

Top Contributor
Bitte nimm Abstand von der Bezeichnung Haupttabelle bzw. Unter-/Nebentabelle.
Es sind alles einfach Tabellen und da gibt es keine Hierarchie.

Du musst selber die Datensätze in die 2.Tabelle eintragen mit allen benötigten Fremdschlüsseln.
Die Datenbank kann sich ja nicht ausdenken welche weiteren Werte sie einträgt.

Beispiel:
Es gibt 2 Tabellen.
Tabelle B speichert Adressen (ID, Straßenname, Hausnummer, Stock, PLZ, Ort, Land, ...)
Tabelle A speichert Personendaten (ID, Alter, Name, Geschlecht, Email, ...) und hat eine Spalte mit Fremdschlüsselbeziehung zur Tabelle B (Spalte ID)

Nur weil du jetzt in Tabelle B einen neuen Datensatz anlegst, kannst du nicht erwarten das die Datenbank in Tabelle A einen Datensatz angelegt dafür.
Woher soll die Datenbank wissen welche Person unter der von dir eingetragenen Adresse wohnt?

Du musst dann natürlich einen Datensatz in Tabelle A eintragen mit den entsprechenden Daten.
 
Zuletzt bearbeitet:

vikil

Aktives Mitglied
Um auf dein Beispiel zurückzukommen

1->Ja ich muss in Tabelle A und B Datensätze Eintragen. Das habe ich auch so verstanden

2-> Paralell dazu lege ich Tabelle C Verwalten(ID_TabA, ID_Tab_B )an. Dadurch habe ich die Verbindung zu den Datensätzen zwischen beiden Tabellen A und B.
Frage ist nur wie kommt ID_TabA, ID_Tab_B in Tabelle C rein.

Habe es so verstanden, da es die Fremdschlüssel sind(ID_TabA, ID_Tab_B sind Fremdschlüssel in Tabelle C von Tabelle A und B) wird es automatisch angelegt. oder wo ist mein Denkfehler?


DANKE
 

Joose

Top Contributor
Nein da wird nichts automatisch angelegt, diese Verbindung musst du herstellen und auch so eintragen. (Woher soll eine Datenbank wissen welche Datensätze "verbunden" sind? Bzw. werden oft noch zusätzliche Daten gespeichert und diese kann sich eine Datenbank nicht ausdenken)
Sprich: Du musst einen Datensatz in Tabelle C eintragen, dieser Datensatz muss/kann die Fremdschlüssel von A bzw. B enthalten (und alle weiteren benötigten Daten).
 

vikil

Aktives Mitglied
Hallo Joosse,
dankte erstmall für deine Mühe. Habs nochmal nachgelesen und mir ist ein LICHT aufgegangen.
Kurze Frage noch
Wenn ich in Tabelle A und B Datensätze speichere, wie bekomme ich die IDs von Tabelle A und B (da diese erst beim speichern angelegt werden), um diese in Tabelle alls Fremdschlüssel in Tabelle C einzuragen.

Viiiiiiiiiilen Dank
 
Zuletzt bearbeitet:

Joose

Top Contributor
Sollten die Keys per AUTO INCREMENT erstellt werden so bieten dir viele SQL Treiber die Möglichkeit an die zuletzt erstellte ID abzufragen. So kannst du diese gleich deinem Java Objekt zuweisen.
 

vikil

Aktives Mitglied
Hallo Joose,
binn erst jetzt wieder dazugekommen.

Habe inzwischen auch was gefunden

Java:
String sql_projekt_ID = "select  last_insert_rowid()";
           pst = conn.prepareStatement(sql_projekt_ID);
            rs = pst.executeQuery();
            System.out.println(rs+" : "+ pst);

bekomme die Referenz von dieser ID. kannst mir sagen wie ich diese in Integer wandele?

DANKE
 

Ähnliche Java Themen


Oben