Primary-Keys

Hallo,

ich habe eine Frage zu Primary-Keys.
Ich möchte z.B. folgende Tabelle aufbauen:

 id | language_id |  text
----+-------------+---------
  1 |           1 | deutsch
  1 |           2 | german
  2 |           1 | englisch
  2 |           2 | english

Und zwar sollen die Spalten id und language_id Primary-Keys sein. Kann ich Postgre irgendwie dazu bringen,
die IDs wie oben aufgeführt zu vergeben? Ich bekomme es nur so hin:

 id | language_id |  text
----+-------------+---------
  1 |           1 | deutsch
  2 |           2 | german
  3 |           3 | englisch
  4 |           4 | english

Besten Dank schon mal

Gruß,
Markus

Wenn language_id ein Primary Key sein soll, kann die ‘1’ nicht doppelt auftauchen. Oder du hast deinen Satz falsch formuliert grübel

Der Primary-Key wird über die Spalten id und language_id gebildet. D.h. doch, dass die Kombination von id und language_id nicht doppelt vorkommen darf. Also sollte doch erlaubt sein:

 id | language_id |  text
----+-------------+---------
  1 |           1 | deutsch
  1 |           2 | german

Aber nicht:

 id | language_id |  text
----+-------------+---------
  1 |           1 | deutsch
  1 |           1 | german

Habe das auch mal probiert und Postgre akzeptiert das soweit.

Ich hoffe wir reden jetzt nicht aneinander vorbei :slight_smile:

Du hast von Primary Keys (imho also jeweils einem Key auf jede Spalte) gesprochen :wink:


Nun, ich verstehe dein Problem nicht ganz, was hindert dich daran, die Daten mit passenden Inserts so einzufügen, wie du sie brauchst?

Aha, mein Fehler :astonished:
Das werde ich dann auch so machen. War nur interessenhalber, da es dann auf der Programmierseite dann auch etwas weniger Arbeit wäre.
Trotzdem danke

Du kannst Dir das auch bestimmt db-intern machen lassen, via trigger.
Ich sehe aber keinen Vorteil gegenüber einem einfachen PK aus einem serial-Feld. Ach ja, wenn Du das in der Applikation machst, würde ich mal ganz spontan sagen, Du wirst Locks brauchen.

Andreas

Danke, das werde ich dann mal berücksichtigen.