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.
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
Warum das Tabellenformat? Die zwei "Spalten" haben hier keine Bedeutung ... – wildplasser
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). –