Frage

Ein paar letzter Fragen diskutieren Strategien für die Benennung von Spalten, und ich war ziemlich überrascht, dass das Konzept der Einbettung des Begriffs des Außen- und Primärschlüssels in Spaltennamen zu entdecken. Das ist

select t1.col_a, t1.col_b, t2.col_z
from t1 inner join t2 on t1.id_foo_pk = t2.id_foo_fk

Ich muss zugeben, ich habe noch nie auf jedem Datenbanksystem gearbeitet, die diese Art von Schema verwendet, und ich frage mich, was die Vorteile sind. So wie ich es sehe, wenn Sie die N Haupt Tabellen eines Systems gelernt haben, werden Sie mehrere Größenordnungen mehr Anfragen mit diesen Tabellen schreiben.

Um in der Entwicklung produktiver zu werden, müssen Sie lernen, welche Tabellen sind die wichtigsten Tabellen, und die einfach Zuflüsse. Sie werden eine gute Anzahl von Spaltennamen einzuprägen möchten. Und eine der grundlegenden Aufgaben ist zwei Tabellen miteinander zu verbinden. Um den Lernaufwand zu reduzieren, ist die einfachste Sache zu tun ist, um sicherzustellen, dass der Spaltenname das gleiche in beiden Tabellen:

select t1.col_a, t1.col_b, t2.col_z
from t1 inner join t2 on t1.id_foo = t2.id_foo

ich postulieren, dass als Entwickler, nicht wahr werden müssen daran erinnert, dass viel über die Spalten Primärschlüssel sind, die fremd sind und die nichts. Es ist einfach genug, um das Schema zu suchen, wenn Sie neugierig sind. Wenn bei einem zufälligen suchen

tx inner join ty on tx.id_bar = ty.id_bar

... ist es so wichtig zu wissen, welche der Fremdschlüssel? Fremdschlüssel sind nur wichtig, um den Datenbank-Engine selbst, zu ermöglichen es referentielle Integrität und das Richtige tun bei Updates, um sicherzustellen, und löscht.

Welches Problem wird hier gelöst? (Ich weiß, das ist eine Einladung zu diskutieren, und fühlen Sie sich frei, dies zu tun. Aber zur gleichen Zeit, I am Suche nach einer Antwort, dass ich kann wirklich etwas fehlt sein).

War es hilfreich?

Lösung

Ich stimme Ihnen zu, dass die Fremdschlüsselspalte in einer untergeordneten Tabelle den gleichen Namen wie die Primärschlüsselspalte in der übergeordneten Tabelle haben soll. Beachten Sie, dass dies erlaubt Syntax wie folgt aus:

SELECT * FROM foo JOIN bar USING (foo_id);

Das Schlüsselwort USING geht davon aus, dass eine Spalte mit dem gleichen Namen in beiden Tabellen vorhanden ist, und dass Sie ein Equi-Join. Es ist schön, diese als Abkürzung zur Verfügung zu haben für die ausführlichere:

SELECT * FROM foo JOIN bar ON (foo.foo_id = bar.foo_id);

Beachten Sie jedoch, gibt es Fälle, wenn Sie nicht den Fremdschlüssel der gleiche wie der Primärschlüssel benennen kann es verweist. Zum Beispiel in einer Tabelle, die hat eine Selbstreferenz:

CREATE TABLE Employees (
  emp_id INT PRIMARY KEY,
  manager_id INT REFERENCES Employees(emp_id)
);

Auch kann eine Tabelle mehrere Fremdschlüssel auf die gleiche übergeordnete Tabelle hat. Es ist nützlich, um den Namen der Spalte zu verwenden, um die Art der Beziehung zu beschreiben:

CREATE TABLE Bugs (
  ...
  reported_by INT REFERENCES Accounts(account_id),
  assigned_to INT REFERENCES Accounts(account_id),
  ...
);

Ich mag auf den Namen der Tabelle in der Spalte Name nicht enthalten. Ich eschew auch den obligatorischen „id“ als Name des Primärschlüsselspalts in jeder Tabelle.

Andere Tipps

Ich stimme Ihnen zu. Setzen Sie diese Informationen in der Spalte Name schmatzt der crappy ungarischen Notation Idiotie der frühen Windows-Tage.

ich vermählt haben die meisten Ideen hier über die 20-ish Jahren habe ich vorgeschlagen, mit SQL-Datenbanken zu entwickeln habe, ich bin peinlich zu sagen. Die meisten von ihnen gelieferten wenige oder keine der erwarteten Vorteile und waren im Nachhinein einen Schmerz im Nacken.

Jedes Mal, wenn ich mehr als ein paar Stunden mit einem Schema verbracht habe habe ich ziemlich schnell vertraut werden mit den wichtigsten Tabellen und deren Spalten. Dessen Schuss geht ein paar Monaten bekam, ich würde ziemlich viel haben die ganze Sache in meinem Kopf.

Wer ist das alles erklären? Jemand, der nur ein paar Minuten mit dem Design verbringt wird nichts zu tun ernst sowieso werden. Jemand, der mit ihm für eine lange Zeit arbeiten will wird es lernen, wenn Sie Ihre Spalten in Sanskrit genannt.

Verbindung Primärschlüssel Ignorieren, ich sehe nicht, warum etwas so einfach wie „id“ wird nicht für einen Primärschlüssel genügen, und „_id“ für Fremdschlüssel.

So ein typischer Join-Bedingung wird customer.id = order.customer_id.

Wenn mehr als eine Assoziation zwischen zwei Tabellen vorhanden ist, ich geneigt sein würde, den Verein zu verwenden, anstatt die Tabellennamen, so vielleicht „parent_id“ und „child_id“ statt „parent_person_id“ etc

Ich verwende nur den Tabellennamen mit einem Id-Suffix für den Primärschlüssel, z.B. CustomerId und Fremdschlüssel verweist, dass aus anderen Tabellen würde auch CustomerId genannt werden. Wenn Sie in der Anwendung verweisen wird es die Tabelle aus den Objekteigenschaften offensichtlich, z.B. Customer.TelephoneNumber, Kunde.Kundennr, etc.

Ich habe „fk_“ am vorderen Ende von Fremdschlüssel für eine Tabelle vor allem, weil es mir geholfen, es gerade zu halten, wenn die DB für ein Projekt in meinem Geschäft zu entwickeln. Nachdem in der Vergangenheit nicht getan jede DB Arbeit, hat dies mir helfen. Im Nachhinein vielleicht brauchte ich nicht, das zu tun, aber es war drei Zeichen auf einige Spaltennamen geheftet, so habe ich es nicht schwitzen.

Als Neuling in DB-Anwendungen zu schreiben, habe ich kann einige Entscheidungen getroffen, die einen erfahrenen DB Entwickler Schauder machen würde, aber ich bin nicht sicher, ob der Fremdschlüssel Sache wirklich so groß ist ein Deal. Auch ich denke, es ist ein Unterschied im Hinblick auf dieses Problem ist, und ich werde auf jeden Fall das, was Sie geschrieben haben, und cogitate darauf.

Haben

ein gutes!

Ich stimme mit Ihnen überein - ich nehme einen anderen Ansatz, den ich in vielen Unternehmensumgebungen empfohlen gesehen:

Name Spalten im Format TableNameFieldName , also wenn ich einen Kunden Tisch hatte und Username war eine meiner Felder, würde das Feld CustomerUserName aufgerufen werden. Das bedeutet, dass wenn ich eine andere Tabelle mit dem Namen Rechnung hatte, und den Benutzernamen des Kunden war ein Fremdschlüssel, würde ich es InvoiceCustomerUserName nennen, und als ich auf sie verwiesen, würde ich es Invoice.CustomerUserName nennen, die mir sofort erzählt, welche Tabelle es ist in.

Auch hilft diese Namensgebung Sie den Überblick über die Tabellen, um Ihre Spalten kommen aus, wenn Sie joiining.

ich nur FK_ und PK_ in den tatsächlichen Namen des Außen- und Primärschlüssels im DBMS verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top