2017-12-25 2 views
0

ist es möglich, von zwei Fremdschlüssel in der Tabelle zu haben dieselbe Tabelle Beispiel Post-Tabelle hat User_ID und Benutzernamen aus der Tabelle BenutzerMySQL zwei Fremdschlüssel aus derselben Tabelle

-------------------------------- 
|table user | table post  | 
|-------------|----------------| 
|user_id  | post_id  | 
|username  | post_title  | 
|password  | post_content | 
|email  | user_id  Fk | 
|    | username Fk | 
-------------------------------- 
+1

Ja, es ist möglich, Sie können sogar zwei Fremdschlüssel auf den gleichen Schlüssel zeigen. Zum Beispiel post.user_id = user.user_id und post.supervisor_user_id = user.user_id – Alan

+0

Warum das Tabellenformat? Die zwei "Spalten" haben hier keine Bedeutung ... – wildplasser

+0

Was auch immer Ihre Motivation sein mag, um den Benutzernamen in die Post-Tabelle zu kopieren ... Sie sollten es fast sicher nicht tun. Sie haben transitive Abhängigkeiten zwischen nicht-primären Attributen, was möglicherweise sehr problematisch ist. Siehe [Dritte Normalform] (https://en.m.wikipedia.org/wiki/Third_normal_form). –

Antwort

2

Technisch in Ordnung.

Aber bedenken Sie, dass die oben aufgeführte Struktur zu seltsamen Situationen führen kann.

Wenn ein Benutzer seinen eigenen Benutzernamen ändern darf (was eine separate Diskussion darüber ist, ob dies ratsam ist oder nicht), könnte es passieren, dass ein Benutzer seinen Namen nicht ändern kann (weil dann die Integrität des Fremdschlüssels mit einem Beitrag, der sich auf seinen Namen bezieht, gebrochen wäre oder ein Benutzer versuchen könnte, die Beiträge eines anderen Benutzers zu entführen, indem er den Namen entsprechend ändert.

All diese Probleme können leicht genug verhindert werden, aber als allgemeine Regel halte ich es für besser, sich an einen einzigen Foreign Key zu halten und generell eine Nummer (wie user_id) anstelle von Text zu verwenden.

@Alan erwähnt die Idee von zwei Feldern in einer Tabelle, die auf das gleiche Fremdschlüsselfeld einer anderen Tabelle verweisen - das ist ziemlich üblich und allgemein OK.

1

Ja, es ist möglich, zwei Fremdschlüssel in derselben Tabelle zu verwenden.

Aber in Ihrem Fall brauchen Sie nicht 'Benutzername' als Fremdschlüssel. weil 'user_id' verwendet werden kann, um den Benutzernamen auszuwählen.

Verwandte Themen