Dies ist eine zweiteilige Frage, so dass jeder Rat zu beiden Seiten willkommen ist. Ich benutze auch PostgreSQL.SQL-Fehler dieser Namenskonvention?
Frage 1 Ich habe also einige der Threads über Namenskonventionen für Einschränkungen für ein Projekt gelesen, an dem ich arbeite. Da es in den frühen Stadien ist, möchte ich es richtig machen.
Ich bemerke die Mehrheit hier (und andere Quellen) schlagen vor, etwas in Richtung fk_activetable_referencedtable_fieldname
zu tun. Als ein Beispiel, wenn ich zwei Tabellen hatte, hieß eine user
und die andere posts
. Ein Fremdschlüssel in der Posts-Tabelle, der zur Benutzertabelle und zum ID-Feld geht, könnte etwas in der Art von fk_posts_user_id
aussehen.
Ich dachte, dass eine bessere Wahl wäre fk_referencedtable_fieldname_activetable
. Auf diese Weise würde es in gewissem Sinne einem ähnlichen Muster folgen wie das sequentielle Benennen von Dingen, z. B. fk_user_id1, fk_user_id2 usw .; wo statt am Ende 1,2,3,4 wäre, würde das Ende die Tabelle bedeuten, dass der Fremdschlüssel lokalisiert ist. Daher würde mein Fremdschlüssel im obigen Beispiel fk_user_id_post
heißen. Derzeit ist es einfacher, alle meine Fremdschlüssel für einen Primärschlüssel zu sehen, indem ich es so nenne, aber es ist nicht das Ende der Welt, wenn es einen besseren Grund gibt, es anders zu machen.
Gibt es irgendwelche Nachteile, dies zu tun?
Frage 2 Wie Sie Situationen umgehen können, wo Sie eine Tabelle haben angenommen, bei dem die ersten drei Spalten alle Fremdschlüssel auf den gleichen Primärschlüssel auf einem anderen Tisch?
das gleiche Beispiel wie oben verwenden, wenn Sie einen usertree
Tisch haben, wo die erste Spalte (genannt user_id
) die id
aus der user
Tabelle identifiziert, die zweiten Spalte (genannt user_pid
), geht auch auf den gleichen Primärschlüssel wie Die Tabelle user
speichert jedoch den Wert des übergeordneten Benutzers. Die letzte Spalte, die derselben Konvention wie die vorherige folgt (user_rid
), speichert den Wert des übergeordneten übergeordneten Elements in der Hierarchie.
Im Moment bin ich mir nicht sicher, ob es besser ist, einen fremden Schlüssel zu machen, wo der Name fk_user_id_usertree
ist (da sie alle technisch die Benutzertabelle, ID-Feld beziehen) oder etwas in der Richtung fk_user_id_user_pid_user_rid_usertree
was ich fühle würde bei Charakteren zunehmen und möglicherweise die Zeichengrenze mit nicht so kurzen Feldern treffen.
Leider habe ich keine große Erfahrung mit SQL, daher würde ich mich über jeden Einblick freuen, den mir jemand bieten kann.