# HSQLDB => diverses



## The_S (31. Jul 2006)

Tach,

wie kann ich bei HSQLDB in einer Tabelle mehrere Primary Keys anlegen und wie wende ich das AUTO_INCREMENT Statement aus MySQL an?


----------



## AlArenal (31. Jul 2006)

Eine Tabelle kann nur einen Primary Key haben, sonst wäre er ja nicht mehr primary...

MySQLs Auto-Increment ist ne nette Sache, aber nicht konform zum SQL-Standard. "Normale" DBs arbeiten mit Sequences. HSQLDB hat darüber hinaus ein ähnliches Konzept wie MySQL.

Steht aber auch alles in der Doku:

http://www.hsqldb.org/doc/guide/ch02.html#N104AE


----------



## The_S (31. Jul 2006)

AlArenal hat gesagt.:
			
		

> Eine Tabelle kann nur einen Primary Key haben, sonst wäre er ja nicht mehr primary...



Primary Key ist aber mehr, dass er eindeutig ist und mit 2 Primary Keys wird imho sichergestellt dass beide zusammen einzigartig sind. Oder habsch da im Unterricht net aufgepasst?



			
				AlArenal hat gesagt.:
			
		

> MySQLs Auto-Increment ist ne nette Sache, aber nicht konform zum SQL-Standard. "Normale" DBs arbeiten mit Sequences. HSQLDB hat darüber hinaus ein ähnliches Konzept wie MySQL.
> 
> Steht aber auch alles in der Doku:
> 
> http://www.hsqldb.org/doc/guide/ch02.html#N104AE



OK, das wusste ich nicht. Werds mir gleich mal anschauen. Danke!


----------



## AlArenal (31. Jul 2006)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> AlArenal hat gesagt.:
> 
> 
> 
> ...



Dann ist es aber dennoch nur EIN Primary Key, der über mehrere Spalten geht. Es handelt sich, betrachtet man jede Spalte für sich, nicht jeweils um einen Primary Key. MySQL verdirbt leider viele User, indem es vieles etwas anders löst oder anders darstellt, als die großen kommerziellen RDBMS und ihre kleineren freien Ableger. Vom Standard ganz zu schweigen...


----------



## foobar (31. Jul 2006)

> Primary Key ist aber mehr, dass er eindeutig ist und mit 2 Primary Keys wird imho sichergestellt dass beide zusammen einzigartig sind. Oder habsch da im Unterricht net aufgepasst?


Das nennt man zusammengesetzter Primary Key.


----------



## DaKu (3. Aug 2006)

Ich hätte da auch mal ne Frage zu HSQLDB und zwar wozu brauche ich ein Benutzername und ein Passwort beim laden der DB :?:  ???:L


----------



## AlArenal (3. Aug 2006)

DaKu hat gesagt.:
			
		

> Ich hätte da auch mal ne Frage zu HSQLDB und zwar wozu brauche ich ein Benutzername und ein Passwort beim laden der DB :?:  ???:L



Zur Benutzung der DB 

Je nachdem welche Rechte der User hat, kannst du eben nur einen Teil der möglichen Operationen ausführen. Beu HSQLDB ist standardmäßig sa (System Administrator) dabei. Bei MySQL muss nach der Installation erstmal ein administrativer User erstellt werden.


----------



## DaKu (3. Aug 2006)

aber es hat nichts mit irgendeiner Verschlüsselung der DB zu tun, da die Daten ja offen in der .script stehen

Falls nicht, gibt es da eine Möglichkeit das der Benutzer nicht an die Daten kommt?


----------



## AlArenal (3. Aug 2006)

DaKu hat gesagt.:
			
		

> aber es hat nichts mit irgendeiner Verschlüsselung der DB zu tun, da die Daten ja offen in der .script stehen



Nein, es bezieht sich allein auf Datenbank-interne Benutzer.



> Falls nicht, gibt es da eine Möglichkeit das der Benutzer nicht an die Daten kommt?



Wird AFAIK nicht unterstützt. H2 soll das können, allerdings weiß ich nicht wie weit das schon implementiert ist.


----------



## DaKu (3. Aug 2006)

kann man die DB auch mitgeben wie die HSQLDB?


----------



## foobar (3. Aug 2006)

> Falls nicht, gibt es da eine Möglichkeit das der Benutzer nicht an die Daten kommt?


Ja, es gibt einen Patch mit dem man die .script verschluesseln kann. Du kannst aber auch einfach die Daten komprimieren, dann kommt man nicht mehr so leicht dran:

Einfach diese Query nach dem Create Table ausführen:

```
SET SCRIPTFORMAT COMPRESSED
```


----------



## AlArenal (3. Aug 2006)

H2 kannst du ebenso wie HSQLDB benutzen. Ist vom Autor, von dem der HSQLDB-Urvater HypersonicSQL stammt und ist zur Abwechslung mal ein Deutscher.


----------



## foobar (3. Aug 2006)

@AlArenal H2 sieht nett aus. Hast du schon Erfahrungen damit gesammelt? Wie sieht es mit der Performance aus?


----------



## DaKu (3. Aug 2006)

hmmm, mal schauen
Danke an euch beide


----------



## AlArenal (3. Aug 2006)

foobar hat gesagt.:
			
		

> @AlArenal H2 sieht nett aus. Hast du schon Erfahrungen damit gesammelt? Wie sieht es mit der Performance aus?



Ich habs nur kurz mal angetestet und es verhält sich wie HSQLDB. Über Perfromance kann ich mangels Praxis nichts sagen, glaube aber mal den auf der Homepage einsehbaren Vergleichen. Ich hatte ursprügnlich vor ein Projekt mit Hibernate und HSQLDB umzusetzen und dieses dann einfach gegen H2 auszutauschen. Nach außen sind beide i9n Benutzung und so sehr ähnlich... Nett ist bei H2 (wenn mans mal so unter Windows installiert) natürlich die Sache mit dem Frontend.


----------



## DaKu (3. Aug 2006)

eins habe ich noch
kann man die DB auch noch im nachhinein komprimieren und muss ich das "SET SCRIPTFORMAT COMPRESSED" nach jedem "CREATE TABLE" ausführen (wenn man mehrere Tabellen in der DB hat)?


----------



## AlArenal (3. Aug 2006)

K.A. Was sagt die Doku?


----------



## DaKu (3. Aug 2006)

nicht viel, sagt nur:
Changes the format of the script file. BINARY and COMPRESSED formats are slightly faster and more compact than the default TEXT. Recommended only for very large script files.

jup, aber damit besteht mein Problem noch


----------



## foobar (3. Aug 2006)

Du mußt nur einmal die Property setzen. Ich mache das nachdem ich alle Create Table-Statments abgesetzt habe.


----------



## DaKu (3. Aug 2006)

und kann ich das ganze auch im nachhinein konvertieren?


----------



## foobar (3. Aug 2006)

> und kann ich das ganze auch im nachhinein konvertieren?


Och Mensch, probier es doch einfach aus dann siehste ob es funzt oder nicht. Wir sind doch hier nicht im Kindergarten.


----------



## DaKu (3. Aug 2006)

foobar hat gesagt.:
			
		

> Och Mensch, probier es doch einfach aus dann siehste ob es funzt oder nicht. Wir sind doch hier nicht im Kindergarten.


kann ja sein, das es schoneinmal jemand probiert hat und wenn es nicht geht, kann man es ja dann sein lassen (kommt halt auf die Datenmenge der DB an, ob man die dan nochmal eingeben will)

ABER: das Ergebnis ist positiv  :applaus: , man kann es im nachhinein noch ändern, ohne das Daten verloren gehen (war bei mir zumindest)

MfG
DaKu


----------

