Wie soll ich eine Tabelle nennen, die zwei Tabellen miteinander abbildet? [geschlossen]


137

Angenommen, ich habe zwei Tabellen:

Table: Color
Columns: Id, ColorName, ColorCode

Table: Shape
Columns: Id, ShapeName, VertexList

Wie soll ich die Tabelle nennen, die Farbe und Form abbildet?

Table: ???
Columns: ColorId, ShapeId

ColorShape- und ShapeColor-Alias ​​für Symmetrie.
LukLed

2
Ich bin gerade auf eine ähnliche Frage gestoßen, die ich vorher nicht gesehen habe: stackoverflow.com/questions/1764483/… . Einige andere Ideen aus diesem Thread: Shape2Color, ShapeXColor, ShapeColorLink.
Devuxer

Wenn es einen Standard für die Benennung von Junction-Tabellen gäbe, wäre dies nicht opnionsbasiert. Dann wäre das die Antwort auf die Frage gewesen. Wenn Sie die Frage schließen, schließen Sie die Möglichkeit für jemanden wie mich, zu wissen, ob es Standardmethoden für die Benennung Ihrer Junction-Tabellen gibt oder nicht. Bitte überdenken Sie - diejenigen, die es geschlossen haben ...
Lealo

Antworten:


187

In der Informatik gibt es nur zwei schwierige Dinge: die Ungültigmachung des Caches und das Benennen von Dingen
- Phil Karlton

Wenn Sie einen guten Namen für eine Tabelle finden, die eine many-to-manyBeziehung darstellt, ist die Beziehung leichter zu lesen und zu verstehen. Manchmal ist es nicht trivial, einen guten Namen zu finden, aber normalerweise lohnt es sich, etwas Zeit damit zu verbringen, darüber nachzudenken.

Ein Beispiel: Readerund Newspaper.

A Newspaperhat viele Readersund a Readerhat vieleNewspapers

Sie könnten die Beziehung nennen, NewspaperReaderaber ein Name wie Subscriptionkönnte besser vermitteln, worum es in der Tabelle geht.

Der Name Subscriptionist auch idiomatischer, wenn Sie die Tabelle später Objekten zuordnen möchten.

Die Konvention zum Benennen von many-to-manyTabellen ist eine Verkettung der Namen beider Tabellen, die an der Beziehung beteiligt sind. ColourShapewäre in Ihrem Fall ein vernünftiger Standard. Das sei gesagt, ich glaube , Nick D kam mit zwei großen Vorschläge: Styleund Texture.


10
+1: gut gesagt - ein sorgfältig ausgewählter Name erleichtert die Wartbarkeit in Zukunft erheblich.
Preet Sangha

115
"In der Informatik gibt es nur zwei schwierige Dinge: Cache-Ungültigmachung, Benennung und Fehler nacheinander"
Neil McGuigan,

1
Nehmen wir an, es gibt eine Kategorie für Produkte und eine andere Kategorie für Rezepte. Für beide Tabellen haben wir Rezeptkategorien und Produktkategorien, und da wir nicht nur den Tabellennamen "Kategorien" für beide Tabellen verwenden können, um den Konflikt zu vermeiden, lauten die Kreuzungstabellen für Produkt und Rezept "Rezeptkategorien" und "Produktkategorien"
c9s

3
Streng logisch bedeutet das Verbinden von Informationen nicht das Hinzufügen neuer Informationen. Ich denke, das passiert, wenn Sie versuchen, ein passendes Wort für Kreuzungstabellen zu finden. Menschen, die Zeitungen lesen, machen sie nicht zu Abonnenten, und es gibt keine Formen ohne Farbe. Durch die Verwendung von "Abonnenten" werden neue Informationen (Bedeutungen) hinzugefügt, wenn Leser mit Zeitungen verbunden werden. Und es gibt keine Worte, um die Verbindung von Form und Farbe zu beschreiben - es gab nie etwas Gegenteiliges, also keinen Namen dafür. Denken Sie daran, dass in einer Junction-Tabelle keine neuen Attribute angegeben sind.
Lealo

35

Wie wäre es mit ColorShapeMap oder Style oder Texture .


5
+1 für etwas eleganteres als nur die Namen der Tische zu verbinden
tosh

22

Interessanterweise gibt etwa die Hälfte der Antworten einen allgemeinen Begriff für jede Tabelle an, die eine Viele-zu-Viele-Beziehung implementiert, und die andere Hälfte der Antworten schlägt einen Namen für diese bestimmte Tabelle vor.

Ich habe diese Tabellen allgemein als Schnittpunkttabellen bezeichnet .

In Bezug auf Namenskonventionen geben die meisten Menschen einen Namen an, der ein Amalgam der beiden Tabellen in der Viele-zu-Viele-Beziehung ist. Also in diesem Fall " ColorShape" oder " ShapeColor." Aber ich finde das sieht künstlich und umständlich aus.

Joe Celko empfiehlt in seinem Buch "SQL Programming Style", diese Tabellen in natürlicher Sprache zu benennen. Wenn eine Form beispielsweise durch eine Farbe gefärbt ist, benennen Sie die Tabelle ColoredBy. Dann könnten Sie ein Diagramm haben, das mehr oder weniger natürlich so lautet:

Shape <-- ColoredBy --> Color

Umgekehrt könnte man sagen, eine Farbe färbt eine Form:

Color <-- Colors --> Shape

Dies sieht jedoch so aus, als ob die mittlere Tabelle dasselbe ist wie Colorbei einer Namenskonvention im Plural. Zu verwirrend.

Wahrscheinlich am klarsten, die ColoredByNamenskonvention zu verwenden. Interessant, dass die Verwendung der passiven Sprache die Namenskonvention klarer macht.


Bill, danke. Sehr interessante Antwort.
Devuxer

@Bill: Alles über die Synonyme und die Synonympräferenz wirkt sich auf die Namenskonvention aus.
OMG Ponys

2
Ich nehme an, es HasColorkönnte ein anderer möglicher Name für die Schnittpunkttabelle sein, die natürliche Sprache verwendet.
Bill Karwin

1
@ Bill: Das Problem, das ich mit dieser Namenskonvention habe, ist hasColour/ ColouredBywofür? Es macht den Zweck der Benennung zunichte DESCRIBE, um die Beziehungen herauszufinden.
OMG Ponys

5
Was passiert ähnlich wie bei OMG Ponys Kommentar, wenn andere Dinge eine Farbe haben können? Wenn ich eine andere Tabelle habe, die Text der Farbe zuordnet, würde ich einen eindeutigen Namen benötigen. Vielleicht ShapeHasColorund TextHasColor?
Devuxer

20

Benennen Sie die Tabelle nach Belieben, solange sie informativ ist:

COLOR_SHAPE_XREF

Aus Modellsicht wird die Tabelle als Join- / Corrollary- / Querverweistabelle bezeichnet. Ich habe es mir zur Gewohnheit gemacht, _XREFam Ende die Beziehung offensichtlich zu machen.


1
Ich benutze auch _XREF ... es hat für mich immer Sinn gemacht.
James Cronen

Ich grabe die Idee, aber als AutoCAD-Benutzer muss ich ein anderes Suffix als _XREF finden ...
Mike

7

Dies ist eine assoziative Einheit und für sich genommen oft von Bedeutung.

Zum Beispiel führt eine viele zu viele Beziehung zwischen ZÜGEN und ZEITEN zu einer ZEITPLAN.

Wenn es keine offensichtliche neue Entität gibt (wie z. B. einen Zeitplan), besteht die Konvention darin, die beiden Wörter zusammen auszuführen und COLOUR_SHAPE oder ähnliches zu geben.


6

Eine Zuordnungstabelle wird normalerweise so genannt.

ColorToShape
ColorToShapeMap

Tatsächlich wird der Begriff Mapping im Allgemeinen verwendet, wenn die Beziehung unidirektional ist (eins zu eins oder viele). Ist dies der Fall? Wenn ja, dann brauchen Sie im Allgemeinen keinen anderen Tisch. Wenn Farbe immer die Form bestimmt, fügen Sie der Farbtabelle eine Formspalte hinzu oder umgekehrt. Eine zusätzliche Tabelle wird im Allgemeinen nur benötigt, wenn die Beziehung viele zu viele ist. In diesem Fall ist der Begriff Mapping nicht geeignet.
Charles Bretana

In diesem Fall kann jede Form an jede Farbe angepasst werden, also viele zu viele.
Devuxer

2
Übrigens, ob es sich um eine Zuordnungstabelle handelt oder nicht, ich mag die Idee, sie Toim Namen zu verwenden. Was ist, wenn Sie Form mit HighlightColor haben? Wenn Sie es nennen ShapeHighlightColor, ist es ein wenig mehrdeutig, ob es sich um ein ShapeHighlight handelt, das einer Farbe zugeordnet ist, oder um eine Form, die einer Highlight-Farbe zugeordnet ist. So ShapeToHighlightColorkönnte klarer sein.
Devuxer

Zu Ihrer Information: Oracle (9i / 10g sowieso) hat eine Beschränkung von 32 Zeichen für Tabellennamen, sodass Sie nicht zu wortreich werden können.
OMG Ponys

Ich habe die Antwort oben verwendet, aber auf eine etwas andere Art und Weise. dh Color_Shape_Map. Konvention: Table1_Table2_Map
Goldfish

6

Ich habe mit DBAs gearbeitet, die es eine Join-Tabelle nennen .

Colour_Shape ist ziemlich typisch - es sei denn, die Beziehung hat einen expliziten domänenspezifischen Namen.


1
Ich mag keine Unterstriche, weil sie im Widerspruch zu Namenskonventionen für Fremdschlüssel stehen, sodass Sie böse Namen wie Colour_Shape_Colourund erhalten Colour_Shape_Shape.
Dan Bechard

4

Normalerweise höre ich das als Junction Table bezeichnet. Ich benenne die Tabelle nach dem, was sie verbindet, also in Ihrem Fall entweder ColorShape oder ShapeColor. Ich denke, es ist sinnvoller, wenn eine Form eine Farbe hat, als wenn eine Farbe eine Form hat, also würde ich mitmachen ShapeColor.


4

Junction table

ODER Bridge Table

ODER Join Table

ODER Map Table

ODER Link Table

ODER Cross-Reference Table

Dies kommt zum Einsatz, wenn wir viele-zu-viele-Beziehungen anstreben, bei denen die Schlüssel aus beiden Tabellen den zusammengesetzten Primärschlüssel der Junction-Tabelle bilden.


4

Ich empfehle, eine Kombination der Namen von Entitäten zu verwenden und sie in den Plural zu setzen. Somit drückt der Name der Tabelle die Verbindung "viele zu viele" aus.

In deinem Fall:

Farbe + Form = FarbenFormen


Wenn Sie die Route "Namen von Tabellen" wählen, ist dies besser, da die singuläre Version "normalerweise" eine Tabelle mit Namespace ist.
Andrew Haust

3

Zwischentabelle oder Join-Tabelle

Ich würde es "ColorShapes" oder "ColorShape" nennen, je nach Ihren Vorlieben


3

Ich habe auch den Begriff Assoziative Tabelle gehört.

Ein Name für Ihre Tabelle kann ColorShapeAssociationsbedeuten, dass jede Zeile eine Zuordnung zwischen dieser Farbe und dieser Form darstellt. Die Existenz einer Reihe impliziert, dass die Farbe in dieser Form vorliegt und dass die Form in dieser Farbe vorliegt. Alle Zeilen mit einer bestimmten Farbe sind die Menge aller Formen, denen die Farbe zugeordnet ist, und die Zeilen für eine bestimmte Form sind die Menge aller Farben, in denen die Form eingegangen ist ...


Aber wie würden Sie die eigentliche Tabelle nennen?
Devuxer

Es hängt davon ab, was die Tabelle beschreibt. Wenn es heißt: "Alles Orange muss eine Raute sein", "Alles Lila muss ein Kreis sein" usw., dann können Sie es eine Sache nennen (Colour_of_Shape, vielleicht). Wenn es sich um eine lockerere Definition handelt - bekannte Farben für Formen, bei denen eine einzelne Form viele Male angezeigt wird -, dann vielleicht 'Shape_Colour_Map'.
Jonathan Leffler

2

Im Allgemeinen haben die meisten Datenbanken eine Art Namenskonvention für Indizes, Primärschlüssel usw. In PostgreSQL wurde die folgende Benennung vorgeschlagen:

  • Primärschlüssel: Tabellenname_Spaltenname_Schlüssel
  • eindeutige Einschränkung: Tabellenname_Spaltenname_ Schlüssel
  • exklusive Einschränkung: tablename_columnname_ excl
  • Index für andere Zwecke: Tabellenname_Spaltenname_IDX
  • Fremdschlüssel: Tabellenname_Spaltenname_Fkey
  • Reihenfolge: Tabellenname_Spaltenname_ Seq
  • Auslöser: tablename_actionname_after | before_ trig

Ihr Tisch ist ein mit mir verknüpfter Tisch. Um mit der obigen Benennung in Einklang zu bleiben, würde ich Folgendes wählen:

  • verknüpfte Tabelle: Tabellenname1_Tabellenname2_ lnk

In einer Liste von Tabellenobjekten steht die verknüpfte Tabelle nach Tabellenname1. Dies könnte optisch ansprechender sein. Sie können aber auch einen Namen wählen, der den Zweck des Links beschreibt, wie andere vorgeschlagen haben. Dies kann dazu beitragen, den Namen der ID-Spalte kurz zu halten (wenn Ihr Link eine eigene benannte ID haben muss und in anderen Tabellen referenziert wird).

  • oder mochte Tabelle: Zweckname_ lnk

1
Gute alte ungarische Notation, wir treffen uns wieder.
Dan Bechard

1

Ich habe mich immer für den Begriff "Hamburger Tisch" interessiert. Ich weiß nicht warum - es klingt einfach gut.

Oh, und ich würde die Tabelle ShapeColor oder ColorShape nennen, je nachdem, welche Tabelle am häufigsten verwendet wird.


1

"Viele-Viele" -Tisch. Ich würde es "ColourShape" nennen oder umgekehrt.


1

Es ist schwer, etwas so Willkürliches wie dieses zu beantworten, aber ich bevorzuge eher Toshs Idee, es nach etwas in der tatsächlichen Domäne zu benennen, als eine allgemeine Beschreibung der zugrunde liegenden Beziehungen.

Sehr oft entwickelt sich diese Art von Tabelle zu etwas Reichhaltigerem für das Domänenmodell und nimmt über die verknüpften Fremdschlüssel hinaus zusätzliche Attribute an.

Was ist zum Beispiel, wenn Sie zusätzlich zur Farbe eine Textur speichern müssen? Es mag etwas funky erscheinen, die Tabelle SHAPE_COLOR zu erweitern, um ihre Textur beizubehalten.

Auf der anderen Seite gibt es auch etwas zu sagen, um eine fundierte Entscheidung zu treffen, die auf Ihren heutigen Anforderungen basiert, und um bereit zu sein, eine Umgestaltung vorzunehmen, wenn später zusätzliche Anforderungen eingeführt werden.

Alles in allem würde ich es OBERFLÄCHE nennen, wenn ich die Einsicht hätte, dass später zusätzliche oberflächenähnliche Eigenschaften eingeführt werden. Wenn nicht, hätte ich keine Probleme damit, es SHAPE_COLOR oder ähnliches zu nennen und zu dringlicheren Designproblemen überzugehen.


1

Vielleicht nur ColoredShape?

Ich bin mir nicht sicher, ob ich die Frage bekomme. Geht es um diesen speziellen Fall oder suchen Sie nach allgemeinen Richtlinien?


0

Ich würde es mit den genauen Namen der Tabellen benennen, die verbunden werden = ColorShape.


0

In Anlehnung an das, was Developer Art erzählt hat,

ColorShape

wäre eine übliche Namenskonvention. Im ER-Diagramm wäre es eine Beziehung.


0

Nennen Sie es eine Querverweistabelle.

XREF_COLOR_SHAPE
(
     XCS_ID INTEGER
     C_ID   INTEGER
     S_ID   INTEGER
)

0

Ich würde verwenden r_shape_colorsoder r_shape_colorabhängig von seiner Bedeutung.
r_wäre ein Ersatz für xref_in diesem Fall.


0

Ich stimme für einen Namen, der die Tabelle am besten beschreibt. In diesem Fall kann es sein, ShapeColoraber in vielen Fällen ist ein anderer Name als eine Verkettung besser. Ich mag Lesbarkeit und für mich bedeutet das keine Suffixe, keine Unterstriche und keine Präfixe.


0

Ich persönlich würde mich für Colour_Shape mit dem Unterstrich entscheiden: Nur weil ich gesehen habe, dass diese Konvention ziemlich oft auftaucht. [aber stimme den anderen Beiträgen hier zu, dass es wahrscheinlich "poetischere" Wege gibt, dies zu tun].

Beachten Sie, dass die Fremdschlüssel auch auf dieser Verknüpfungstabelle erstellt werden sollten, die sowohl auf die Farb- als auch auf die Formtabellen verweist, die auch bei der Identifizierung der Beziehung hilfreich sind.


0

Eine Konvention, die ich häufig für das Verbinden von Tabellen sehe, die ich persönlich mag, ist 'Colour_v_Shape', die ich umgangssprachlich als 'versus Tabellen' bezeichnet habe.

Auf einen Blick wird deutlich, dass die Tabelle eine Viele-zu-Viele-Beziehung darstellt, und es hilft, diese (wenn auch seltene) verwirrende Situation zu vermeiden, wenn Sie versuchen, zwei Wörter zu verketten, die andernfalls ein zusammengesetztes Wort bilden könnten, z. B. "Butter". und "Milch" wird möglicherweise zu "Buttermilch", aber was wäre, wenn Sie auch eine Entität namens "Buttermilch" repräsentieren müssten?

Wenn Sie es so machen, haben Sie 'Butter_v_Milk' und 'Buttermilk' - keine Verwirrung.

Außerdem denke ich gerne, dass die ursprüngliche Frage eine Foo Fighters-Referenz enthält.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.