Ich weiß, dass dies zu spät zum Spiel kommt, und die Frage wurde bereits sehr gut beantwortet, aber ich möchte meine Meinung zu # 3 bezüglich des Präfixes von Spaltennamen abgeben.
Alle Spalten sollten mit einem Präfix benannt werden, das für die Tabelle, in der sie definiert sind, eindeutig ist.
Beispiel: Bei den angegebenen Tabellen "Kunde" und "Adresse" verwenden wir die Präfixe "cust" bzw. "addr". "customer" würde "cust_id", "cust_name" usw. enthalten. "address" würde "addr_id", "addr_cust_id" (FK zurück zum Kunden), "addr_street" usw. enthalten.
Als mir dieser Standard zum ersten Mal vorgestellt wurde, war ich absolut dagegen. Ich hasste die Idee. Ich konnte die Idee dieser zusätzlichen Eingabe und Redundanz nicht ertragen. Jetzt habe ich genug Erfahrung damit, dass ich nie mehr zurückkehren würde.
Das Ergebnis ist, dass alle Spalten in Ihrem Datenbankschema eindeutig sind. Dies hat einen großen Vorteil, der alle Argumente dagegen übertrifft (meiner Meinung nach natürlich):
Sie können Ihre gesamte Codebasis durchsuchen und zuverlässig jede Codezeile finden, die eine bestimmte Spalte berührt.
Der Nutzen von # 1 ist unglaublich groß. Ich kann eine Spalte veralten und weiß genau, welche Dateien aktualisiert werden müssen, bevor die Spalte sicher aus dem Schema entfernt werden kann. Ich kann die Bedeutung einer Spalte ändern und weiß genau, welcher Code überarbeitet werden muss. Oder ich kann einfach feststellen, ob Daten aus einer Spalte überhaupt in einem bestimmten Teil des Systems verwendet werden. Ich kann nicht zählen, wie oft dies aus einem potenziell großen Projekt ein einfaches gemacht hat oder wie viele Stunden wir in der Entwicklungsarbeit gespart haben.
Ein weiterer, relativ geringer Vorteil ist, dass Sie nur Tabellen-Aliase verwenden müssen, wenn Sie einen Self-Join durchführen:
SELECT cust_id, cust_name, addr_street, addr_city, addr_state
FROM customer
INNER JOIN address ON addr_cust_id = cust_id
WHERE cust_name LIKE 'J%';