HSQLDB 2xPK + AutoInc

Status
Nicht offen für weitere Antworten.

DaKu

Aktives Mitglied
Hallo.

Bezugnehmend auf dieses Thema aber mit neuen Schwierigkeiten :bahnhof: :bahnhof: :bahnhof:

und zwar habe ich es mit den 2 PK's hinbekommen
Code:
CREATE TABLE zutaten (namIndex INT NOT NULL,  zutIndex INT NOT NULL, ... , PRIMARY KEY (namIndex, zutIndex));

nun soll aber die "zutIndex" automatisch hochgezählt werden, was ja bei bei nur einem PK automatisch mit IDENTITY gemacht wird.

Weiss einer wie das geht?

Danke und gute Nacht erstmal :wink:
 

DaKu

Aktives Mitglied
Für die, die das gleiche Problem haben, mit HSQLDB geht es nicht, habe da nach ewigen suchen und probieren aufgegeben.

MfG

DaKu
 

bronks

Top Contributor
Ich habe dieses Thema auf beobachten gesetzt, wie es noch frisch war, um mögliche Antworten abzuwarten ...

Es könnte möglich sein, daß irgendeine andere DB das vielleicht machen kann, aber es ist so und so Unfug. Überhaupt wundert man sich wofür AutoInc immer zweckentfremdet wird ... ... . Im eBankTutorial von Sun steht, wie man es richtig macht.
 

DaKu

Aktives Mitglied
wofür ist denn AutoInc sonst gut, wenn nicht zum hochzählen, wenn es diese Option gibt, warum sollte man sie denn dann nicht nutzen?
Könntest du mal ein Link zu diesem Tutorial geben?

Danke
 

DaKu

Aktives Mitglied
aber ich benötige es doch als RowID, warum zweckentfremde ich es Deiner meinung nach?
Hättest du eine bessere Idee?
 

bronks

Top Contributor
DaKu hat gesagt.:
aber ich benötige es doch als RowID, warum zweckentfremde ich es Deiner meinung nach?
Hättest du eine bessere Idee?
Beschreibe bitte, was die Daten im PrimaryKey und des Datensatzes darstellen und was das Programm damit machen wird. Eine Lösung wird sich bestimmt finden.
 

DaKu

Aktives Mitglied
Also in der DB habe ich 2 Tabellen
1. Tabelle: InxN(PK), name, ...
2. Tabelle: InxN(FK), InxZ(PK), zutaten, masse, ...

in der 2. Tabelle sollen InxN der Femdschlüssel zum PK von Tabelle 1 sein.
und im Endeffekt haben wir eine 1:n Beziehung, weil zu einem Namen mehrere Zutaten gehören und deswegen habe ich jedem Namen und jeder Zutat eine Zahl zugeordnet, die sich bei Eingabe eines neuen Namens, bzw, einer neuen Zutat automat erhöhen soll, damit es keine Lücken gibt.
Deswegen InxN+InxZ soll Unique sein.
Ein weiteres ist, das in der 2. Tabelle bei Eingabe eines neuen Namens, InxZ nicht weiter gezählt werden, sondern wieder bei 0 angefangen werden soll.
Hm, was macht das Programm damit, die Daten auslesen und ausgeben, oder neue hinzufügen.
und das alles über den Inx (Index) der 2 Tabellen.

Hoffe, ich habe es nicht zu wirr erklärt :wink:
 

AlArenal

Top Contributor
@DaKu:

Und was soll das?

Wie ein Key von der DB gezählt und inkrementiert wird sollte programmseitig in der Implementierung völlig egal sein. Und was deine Struktur angeht:
Sinnigerweise packt man Rezepte, Zutaten und 'Rohstoffe' in jeweils eine Tabelle, wobei Zutaten die Verknüpfung übernimmt (n:m und nicht 1:n). Die Zutat eines Rezepts ist nichts weiter als ein Rohstoff mit Mengenangabe und Verbindung zum Rezept.
 

hupfdule

Top Contributor
damit es keine Lücken gibt

Das ist bereits eine falsche Annahme. Mit einem Autoincrement wird es Lücken geben, sobald du einen Eintrag löschst. Es ist auch nicht Sinn der Sache, Lücken zu vermeiden. Autoincrement benutzt man, um eindeutige Schlüssel zu haben, die man nicht selbst vergeben will. Lass deine Anforderung fallen, dass InxZ immer wieder bei 0 beginnen soll und es läuft fein.
Wenn du willst, dass es immer bei 0 beginnt, und du Lücken beim Löschen von Einträgen vermeiden willst, musst du den Schlüssel selbst setzen.
 

DaKu

Aktives Mitglied
Also Lücken soll es bei der Erstellung eines neuen Datensatzes nicht geben, später ist es klar, das es welche geben wird.
Aber es bringt mir nichts, nicht bei 0 anzufangen und das AutoInc fortlaufen zu lassen.
Deswegen mache ich es ja jetzt auch manuell, bleibt mir ja nix anderes übrig, nur da haben sich auch schon Leute gefragt, was da j++ macht :wink: .
Funktioniert ja auch nur in HSQLDB nicht, in MySQL und Oracle müsste es funktionieren.
 

DaKu

Aktives Mitglied
Da ich bei der Eingabe der Daten in die 2. Tabelle die InxZ als Zeilennummer in einem JTable nehme.
 

AlArenal

Top Contributor
Dann sind es Nutzdaten und keine Verwaltungsinfos der DB und damit bist du dafür zuständig, dass sie richtig gesetzt sind und nicht die DB. Da würde ich auch nicht mit Hackentricks versuchen das der DB aufzubürden.

Und Zeilennummer in einer JTable.. also dafür brauch ich kein Feld in der DB. Die Zeilennummern in Eclipse stehen auch nicht im Quellcode.
 

DaKu

Aktives Mitglied
OK, nicht zur nummerierung, sondern zur Positionierung.
Wenn mir die DB jedoch so einen Dienst anbietet, kann man ihn doch auch verwenden, ohne sich weiter eine Platte zu machen, wie man es sonst hinbekommen, oder?
Wenn etwas da ist, sollte man es nutzen.
Da es hier aber nicht geht, musste ich es anders machen, was ich auch gemacht habe.
 

DaKu

Aktives Mitglied
AlArenal hat gesagt.:
@DaKu:

Und was soll das?

Wie ein Key von der DB gezählt und inkrementiert wird sollte programmseitig in der Implementierung völlig egal sein. Und was deine Struktur angeht:
Sinnigerweise packt man Rezepte, Zutaten und 'Rohstoffe' in jeweils eine Tabelle, wobei Zutaten die Verknüpfung übernimmt (n:m und nicht 1:n). Die Zutat eines Rezepts ist nichts weiter als ein Rohstoff mit Mengenangabe und Verbindung zum Rezept.

Verstehe ich jetzt nicht so ganz
das Rezept hat einen Namen, also 1. Tabelle mit Namen, Bild, Beschreibung, ... , halt alles was einzeln ist.
aber das Rezept hat mehrere Zutaten, also 2. Tabelle, wo die ganzen Zutaten reinkommen mit Masse, Einheit und Zutatenname

also meiner Meinung nach eine 1:n Beziehung

oder noch eine extra Tabelle erstellen, wo die Zutatennamen aufgezählt werden und dann mit der 2. Tabelle verknüpft werden?
 

hupfdule

Top Contributor
DaKu hat gesagt.:
OK, nicht zur nummerierung, sondern zur Positionierung.
Ist aber doch auch nicht nötig. Du hast eine Liste von Zutaten. Ob die nun nummeriert sind oder nicht, ist doch wurscht. Du brauchst sie doch nur der Reihe nach hinzufügen.

Wenn mir die DB jedoch so einen Dienst anbietet, kann man ihn doch auch verwenden, ohne sich weiter eine Platte zu machen, wie man es sonst hinbekommen, oder?
Wenn etwas da ist, sollte man es nutzen.
Nur, wenn du es auch so benutzt, wie es gedacht ist. Sonst wird es eher zu unschönen Seiteneffekten kommen (selbst, wenn es zuvor den Anschein macht, es würde funktionieren).
 

DaKu

Aktives Mitglied
hm, na gut, da werde ich mein Programm nochmal überdenken müssen.

Danke trotzdem erstmal.
 

AlArenal

Top Contributor
DaKu hat gesagt.:
Verstehe ich jetzt nicht so ganz
das Rezept hat einen Namen, also 1. Tabelle mit Namen, Bild, Beschreibung, ... , halt alles was einzeln ist.
aber das Rezept hat mehrere Zutaten, also 2. Tabelle, wo die ganzen Zutaten reinkommen mit Masse, Einheit und Zutatenname

also meiner Meinung nach eine 1:n Beziehung

oder noch eine extra Tabelle erstellen, wo die Zutatennamen aufgezählt werden und dann mit der 2. Tabelle verknüpft werden?

Code:
REZEPT:
ID | NAME
---------
1  | Mutterkuchen
2  | Hot Chick
...

ZUTAT:
ID | NAME
---------
1  | Mehl
2  | Ei
3  | Wasser
4  | Zucker
5  | Geile Schnecke
...

REZEPT_ZUTAT:
REZEPT_ID | ZUTAT_ID | Menge | Einheit
--------------------------------------
1         | 1        | 600   | Gramm
...

Alternativ kann man die Ienheit auch in Zutat unterbringen, aber Salz braucht man eben mal nur "ne Prise" und mal eine gewisse Gramm-Menge....
 

DaKu

Aktives Mitglied
das war meine 1. Überlegung, wo es um die Aufteilung der Tabellen ging, nur ist es doch zwecks abfragen optimaler, nur in einer Tabelle die sachen zusammenzusuchen, als eine abfrage über x Tabellen, deswegen habe ich den Zutatenname mit in die andere Tabelle genommen, weil Zeilen lassen sich damit nicht einsparen, oder?
 

AlArenal

Top Contributor
In diesem Beispiel mag es zunächst nicht relevant erscheinen und womöglich auch nie sein, aber nimm mal den Fall, dass du irgendwann festetellen möchtest in wievielen Rezepten "Zucker" vorkommt. Was darfst du in der einen Tabelle erstmal nach allen Einträgen suchen, die das Wort "Zucker" im Titel enthalten und mit der Liste machst du dann ein SELECT .. WHERE .. IN ([zutatenliste]) - das ist mitnichten performanter als ein Join von drei Tabellen mit ordentlichen Indexen.

Ich sehe auch nicht ein, egal ob es um DB-Design oder OO-Design geht, wider besseren Wissens Kompromisse einzugehen und Hackentricks anzuwenden. Saubere Strukturen von Beginn an erleichtern einem immer das Leben.

Darum wird bei mir von Beginn an ordentlich indiziert und normalisiert. Alle weiteren Fragen kann man sich mit EXPLAIN und praktischer Erfahrung selbst beantworten / herleiten.
 

DaKu

Aktives Mitglied
AlArenal hat gesagt.:
Darum wird bei mir von Beginn an ordentlich indiziert und normalisiert. Alle weiteren Fragen kann man sich mit EXPLAIN und praktischer Erfahrung selbst beantworten / herleiten.

:D Die praktische Erfahrung versuche ich mit diesem Programm, welches übrigens mein 1. in Java ist zu machen. :D
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I HSQLDB HSQLDB 2.5.0 - Wie Loggen abstellen? Datenbankprogrammierung 4
B HSQLDB - auto_increment als unexpected token ? Datenbankprogrammierung 1
E Abfrage auf HSQLDB Datenbankprogrammierung 4
windl MySQL und HSQLDB Datenbankprogrammierung 4
D HSQLDB HSQLDB in PHP-Projekt einbinden? Datenbankprogrammierung 7
I Inhalt einer hsqldb anzeigen Datenbankprogrammierung 1
G java.lang.ClassNotFoundException: org.hsqldb.jdbcDriver Datenbankprogrammierung 4
M HSQLDB oder DERBY - warum SCRIPT Datei? Datenbankprogrammierung 0
T Hibernate, HSQLDB und UNIQUE Datenbankprogrammierung 2
F hsqldb Fehler - unknown source Datenbankprogrammierung 11
E HSQLDB Eclipse + Geronimo + HSQLDB = org.hsqldb.jdbcDriver in classloader Datenbankprogrammierung 5
M HSQLDB 2.0 - wie tmp-Verzeichnis löschen Datenbankprogrammierung 2
S HSQLDB DELETE-Statement funktioniert nicht Datenbankprogrammierung 4
M Bei HSQLDB etwas wie OPTIMIZE TABLE? Datenbankprogrammierung 2
F HSQLDB HSQLDB lässt mich nicht auf erstellte Tabelle zugreifen Datenbankprogrammierung 12
D datenbank (hsqldb) in runnable jar einbinden Datenbankprogrammierung 2
E Herangehensweise Neues Projekt mit Netbeans / HSQLDB / JPA Datenbankprogrammierung 3
T Hsqldb: java.lang.NoClassDefFoundError: org/hsqldb/Server Datenbankprogrammierung 2
F Kann keine Verbindung mit HSQLDB aufbauen Datenbankprogrammierung 2
S HSQLDB Kopiere Tabellen Datenbankprogrammierung 2
H hsqldb - Database must be shutdown Datenbankprogrammierung 10
O HSQLDB Verbindung schlägt fehl Datenbankprogrammierung 3
K Jpa hsqldb Datenbankprogrammierung 1
N Problem mit HSQLDB Datenbankprogrammierung 5
N Hsqldb und text tables source not found Datenbankprogrammierung 5
B HSQLDB Datenbank Manager Datenbankprogrammierung 19
R SELECT aus hsqldb mit Parameter Datenbankprogrammierung 2
R HSQLDB Datenbankprogrammierung 10
G hsqldb datenspeicherung Datenbankprogrammierung 2
D H2 DB oder doch HSQLDB ? Datenbankprogrammierung 2
A HSQLDB Performance bei erstem Zugriff Datenbankprogrammierung 6
G HSQLDB überprüfen, ob Tabelle bereits existiert Datenbankprogrammierung 3
@ HSQLDB: socket creation error Datenbankprogrammierung 6
G HSQLDB Files Datenbankprogrammierung 5
G maximale Einträge in HSQLDB Datenbankprogrammierung 7
A Datenspeicherung in hsqldb Datenbankprogrammierung 22
A Umgang mit hsqldb Datenbankprogrammierung 24
A Fehler in der HSQLDB Datenbankprogrammierung 6
A Problem mit der Anbindung zur hsqldb Datenbankprogrammierung 18
J HSQLDB ohne JDBC Datenbankprogrammierung 8
C Keine Verbindung zu HSQLDB möglich Datenbankprogrammierung 22
G Probleme mit Laden des JDBC-Treiber in HSQLDB Datenbankprogrammierung 2
G HSQLDB - kann mir jemand Packages erstellen? Datenbankprogrammierung 6
B HSQLDB und die log-Datei Datenbankprogrammierung 10
W HSQLDB Datenbankprogrammierung 6
G HSQLDB als Dateien anlegen Datenbankprogrammierung 5
S nullpointerexception bei HSQLDB Datenbankprogrammierung 4
L HSQLDB sichern (import und export von DB) Datenbankprogrammierung 3
D HSQLDB in JAR Datenbankprogrammierung 3
S hsqldb und ant Datenbankprogrammierung 3
S Hsqldb java.lang.NullPointerException Datenbankprogrammierung 2
M HSQLDB Server Problem Datenbankprogrammierung 2
T HSQLDB => diverses Datenbankprogrammierung 21
L persistentes Speichern von Daten in der HSQLDB ? Datenbankprogrammierung 5
A Weitere Fragen zu hsqldb Datenbankprogrammierung 6
A Text-Tabellen in HSQLDB Datenbankprogrammierung 9
A HSQLDB Datenbankprogrammierung 10
A Hsqldb ClassDefNotFound Datenbankprogrammierung 2
M Problem mit HSQLDB Datenbankprogrammierung 2
N Hibernate & hsqldb: Problem bei db-update Datenbankprogrammierung 7
G Problem mit der Startenzeit einer HSQLDB Datenbankprogrammierung 4
T HSQLDB, wie mache ich das mit hsqldb.cache_scale? Datenbankprogrammierung 13
E BufferedImage in hsqldb speichern Datenbankprogrammierung 5
B HSqlDb Datenbankprogrammierung 2
X HSQLDB und Variablen Datenbankprogrammierung 7
R hsqldb: performance, große tabellen und so Datenbankprogrammierung 10
P DERBY vs HSQLDB (Vor- Nachteile) Datenbankprogrammierung 3
EagleEye INSERT INTO Problem mit HSQLDB Datenbankprogrammierung 8
G Vector in hsqldb schreiben Datenbankprogrammierung 5
M Cast-Problem - HSQLDB Datenbankprogrammierung 3
C HSQLDB korrekter Shutdown Datenbankprogrammierung 2
C hsqldb Befehle in Java Datenbankprogrammierung 19
P HSQLDB Mehrbenutzerbetrieb Datenbankprogrammierung 7
D HSQLDB Datenbank Zugriff! Datenbankprogrammierung 4
H javaw bleibt bei hsqldb hängen Datenbankprogrammierung 12
D HSQLDB installieren ... Datenbankprogrammierung 8

Ähnliche Java Themen

Neue Themen


Oben