Primärkey ist mehrfach vorhanden
Notschko
- datenbank
Mein derzeitiges Datenbank-Design unter MySQL sieht folgend aus:
language
-------------------------
id(PK)| name | langid
-------------------------
0 | Deutsch | 0
0 | German | 1
1 | Englisch | 0
1 | English | 1
-------------------------
Die "id" steht für die Sprache, die ausgewählt werden kann. "langid" beschreibt, in welcher Sprache der "name" angezeigt werden soll.
Der Sinn: Der Benutzer wählt seine Sprache aus, und soll z.B. in seiner Sprache sehen können, welche Sprachen die anderen Benutzer sprechen.
Da der Primärschlüssel eindeutig sein muss, würde dieses Design so nicht funktionieren.
Habt ihr vielleicht eine Idee, wie man dieses Design in eine Normalform umwandeln könnte?
Ich danke!
Besten Gruß,
Notschko
Hi,
Da der Primärschlüssel eindeutig sein muss, würde dieses Design so nicht funktionieren.
die Kombination aus ID und LANGID ist eindeutig.
Cheatah
die Kombination aus ID und LANGID ist eindeutig.
Gibt es in MySQL die Möglichkeit dies, wie oben beschreiben, zu definieren? Oder muss diese Logik von der Software übernommen werden?
Danke.
Notschko
Hi,
die Kombination aus ID und LANGID ist eindeutig.
Gibt es in MySQL die Möglichkeit dies, wie oben beschreiben, zu definieren?
jawollja.
Oder muss diese Logik von der Software übernommen werden?
Das wäre im Hinblick auf die strukturelle^Wreferenzielle Integrität der Datenbank fatal.
Cheatah
yo,
Da der Primärschlüssel eindeutig sein muss, würde dieses Design so nicht funktionieren.
die Kombination aus ID und LANGID ist eindeutig.
das macht überhaupt keinen sinn, einen künstlichen schlüssel zu vermischen. besser wäre es, die entität language so zu modellieren, dass dort jeweils nur ein eintrag für eine sprache vorhanden ist. wenn nun ein und dieselbe sprache mehrere "bezeichner" haben kann, dann würde ich sie in einen zweite tabelle auslagern (1:n) und bei jeweils einen wert einer sprache ein default-flag setzen.
Ilja
hi,
id(PK)| name | langid
0 | Deutsch | 0
0 | German | 1
1 | Englisch | 0
1 | English | 1Die "id" steht für die Sprache, die ausgewählt werden kann. "langid" beschreibt, in welcher Sprache der "name" angezeigt werden soll.
Habt ihr vielleicht eine Idee, wie man dieses Design in eine Normalform umwandeln könnte?
Nicht die "id" als PK nehmen - zumindest nicht in _dieser_ Tabelle.
gruß,
wahsaga