Jak nazwać tabelę, która mapuje razem dwie tabele? [Zamknięte]


137

Powiedzmy, że mam dwie tabele:

Table: Color
Columns: Id, ColorName, ColorCode

Table: Shape
Columns: Id, ShapeName, VertexList

Jak nazwać tabelę odwzorowującą kolor na kształt?

Table: ???
Columns: ColorId, ShapeId

Alias ​​ColorShape i ShapeColor dla symetrii.
LukLed

2
Właśnie natknąłem się na podobne pytanie, którego wcześniej nie widziałem: stackoverflow.com/questions/1764483/… . Niektóre inne pomysły z tego wątku: Shape2Color, ShapeXColor, ShapeColorLink.
devuxer

Gdyby istniał standard nazewnictwa tabel węzłów - nie byłby oparty na opnionach. Wtedy byłaby to odpowiedź na to pytanie. Zamykając pytanie, zamykasz możliwość, aby ktoś taki jak ja wiedział, czy istnieją standardowe sposoby nazywania tabel skrzyżowań, czy nie. Proszę, zastanów się ponownie - ci, którzy go zamknęli ...
zastanówcie się

Odpowiedzi:


187

W informatyce są tylko dwie trudne rzeczy: unieważnianie pamięci podręcznej i nazywanie rzeczy
- Phil Karlton

Wymyślenie dobrej nazwy tabeli, która reprezentuje many-to-manyrelację, ułatwia czytanie i zrozumienie relacji. Czasami znalezienie świetnej nazwy nie jest trywialne, ale zazwyczaj warto poświęcić trochę czasu na przemyślenie.

Przykład: Readeri Newspaper.

A Newspaperma wiele, Readersa Readerma wieleNewspapers

Możesz nazwać związek, NewspaperReaderale nazwa taka jak Subscriptionmoże lepiej oddać, o czym jest stół.

Nazwa Subscriptionjest również bardziej idiomatyczna na wypadek, gdybyś chciał później zmapować tabelę na obiekty.

Konwencja nazywania many-to-manytabel to konkatenacja nazw obu tabel, które są zaangażowane w relację. ColourShapebyłoby rozsądnym rozwiązaniem w twoim przypadku. To powiedziawszy, myślę, że Nick D miał dwie świetne sugestie: Stylei Texture.


10
+1: dobrze powiedziane - starannie wybrana nazwa teraz znacznie ułatwi konserwację w przyszłości.
Preet Sangha

115
„W informatyce są tylko dwie trudne rzeczy: unieważnianie pamięci podręcznej, nazywanie rzeczy i błędy typu off-by-one”
Neil McGuigan,

1
powiedzmy, jeśli istnieje kategoria produktów i inna kategoria przepisu. dla obu tabel będziemy mieć kategorie_recceptów i kategorie_produktów, a ponieważ nie możemy po prostu nazwać tabeli „kategorie” dla obu tabel, aby zapobiec konfliktowi, tabele połączeń dla produktu i receptury będą miały postać „Recipe_recipe_categories” i „product_product_categories”
c9s

3
Ściśle mówiąc logicznie, łączenie informacji nie oznacza dodawania nowych informacji. Myślę, że tak właśnie się dzieje, gdy próbujesz znaleźć odpowiednie słowo dla tabel skrzyżowań. Osoby czytające gazety nie czynią ich subskrybentami i nie ma kształtów bez koloru. Korzystanie z „abonentów” polega na dodawaniu nowych informacji (znaczeń) przy podłączaniu czytelników do gazet. I nie ma słów, aby opisać połączenie kształtu i koloru - nigdy nie było czegoś przeciwnego, więc nie ma na to nazwy. Pamiętaj, że w tabeli skrzyżowań nie podano żadnych nowych atrybutów.
Lealo

35

Jak o ColorShapeMap lub Style lub tekstury .


5
+1 za wymyślenie czegoś bardziej eleganckiego niż zwykłe dołączanie do nazw stołów
tosh

22

Co ciekawe, około połowa odpowiedzi podaje ogólny termin dla dowolnej tabeli, która implementuje relację wiele do wielu, a druga połowa odpowiedzi sugeruje nazwę tej konkretnej tabeli.

Nazwałam te tabele tabelami przecięć ogólnie.

Jeśli chodzi o konwencje nazewnictwa, większość ludzi podaje nazwę, która jest połączeniem dwóch tabel w relacji wiele-do-wielu. W tym przypadku „ ColorShape” lub „” ShapeColor. Ale wydaje mi się, że wygląda to sztucznie i niezręcznie.

Joe Celko zaleca w swojej książce „Styl programowania w SQL” nazwanie tych tabel w naturalny sposób. Na przykład, jeśli kształt jest pokolorowany kolorem, nazwij tabelę ColoredBy. Wtedy możesz mieć diagram, który mniej więcej czyta naturalnie w ten sposób:

Shape <-- ColoredBy --> Color

I odwrotnie, możesz powiedzieć, że kolor nadaje kształt kształtowi:

Color <-- Colors --> Shape

Ale wygląda na to, że środkowy stół jest tym samym, co Color przypadku konwencji nazewnictwa liczby mnogiej. Zbyt zagmatwane.

Prawdopodobnie najwyraźniej jest użyć ColoredBykonwencji nazewnictwa. Ciekawe, że użycie strony biernej sprawia, że ​​konwencja nazewnictwa jest bardziej przejrzysta.


Bill, dzięki. Bardzo ciekawa odpowiedź.
devuxer

@ Bill: Wszystko o synonimach, a preferencje dotyczące synonimów wpływają na konwencję nazewnictwa.
OMG Kucyki

2
Przypuszczam, że HasColormogłaby to być inna możliwa nazwa tabeli skrzyżowań, która używa języka naturalnego.
Bill Karwin

1
@Bill: Problem, który mam z tą konwencją nazewnictwa polega na hasColour/ ColouredBypo co? To pokonuje cel nazewnictwa, którego należy użyć, DESCRIBEaby znaleźć relacje.
Kucyki OMG

5
Podobnie jak w komentarzu OMG Kucyki, co się stanie, jeśli inne rzeczy mogą mieć kolor? Jeśli mam inną tabelę, która odwzorowuje tekst na kolor, potrzebowałbym unikalnej nazwy. Może ShapeHasColori TextHasColor?
devuxer

20

Nazwij tabelę, jak tylko chcesz, o ile ma ona charakter informacyjny:

COLOR_SHAPE_XREF

Z perspektywy modelu tabela jest nazywana tabelą łączenia / korelacji / odniesień krzyżowych. Zachowałem nawyk używania _XREFna koniec, aby związek był oczywisty.


1
Ja też używam _XREF ... to zawsze miało dla mnie sens.
James Cronen

Podchodzę do tego pomysłu, ale jako użytkownik AutoCAD muszę znaleźć inny sufiks niż _XREF ...
Mike,

7

To jest jednostka stowarzyszona i często ma znaczenie samo w sobie.

Na przykład relacja wiele do wielu pomiędzy POCIĄGAMI i CZASAMI daje początek TIMETABLE.

Jeśli nie ma oczywistej nowej encji (takiej jak harmonogram), wówczas konwencja polega na uruchomieniu tych dwóch słów razem, dając COLOUR_SHAPE lub podobny.


6

Zwykle nazywa się to tablicą mapowania.

ColorToShape
ColorToShapeMap

W rzeczywistości termin mapowanie jest ogólnie używany, gdy relacja jest jednokierunkowa (jeden do jednego lub wiele). Czy to jest przypadek? Jeśli tak, to generalnie nie potrzebujesz innego stołu. Jeśli kolor zawsze determinuje kształt, dodaj kolumnę kształtu do tabeli kolorów lub odwrotnie. Dodatkowa tabela jest zwykle potrzebna tylko wtedy, gdy relacja jest typu „wiele do wielu”. W takim przypadku mapowanie terminu nie jest odpowiednie.
Charles Bretana

W tym przypadku dowolny kształt można dopasować do dowolnego koloru, więc jest to wiele do wielu.
devuxer

2
BTW, niezależnie od tego, czy jest to tabela mapowania, czy nie, podoba mi się pomysł użycia Tow nazwie. A co jeśli masz Shape z HighlightColor. Jeśli to nazwiesz ShapeHighlightColor, jest trochę niejednoznaczne, czy jest to ShapeHighlight mapowane na kolor, czy Shape mapowane na Highlight Color. Więc ShapeToHighlightColormoże być bardziej jasne.
devuxer

Do Twojej wiadomości: Oracle (w każdym razie 9i / 10g) ma limit 32 znaków dla nazw tabel, więc nie możesz być zbyt rozwlekły.
OMG Kucyki

Skorzystałem z powyższej odpowiedzi, ale w nieco inny sposób. tj. Color_Shape_Map. Konwencja: Table1_Table2_Map
Goldfish

6

Pracowałem z administratorami baz danych, którzy nazywają to stołem łączenia .

Colour_Shape jest dość typowy - chyba że relacja ma jawną nazwę domeny.


1
Nie lubię podkreśleń, ponieważ są one sprzeczne z konwencjami nazewnictwa kluczy obcych, przez co otrzymujesz paskudne nazwy, takie jak Colour_Shape_Colouri Colour_Shape_Shape.
Dan Bechard,

4

Zwykle słyszę, że nazywa się to stołem skrzyżowań. Nazywam tabelę według tego, co łączy, więc w twoim przypadku albo ColorShape, albo ShapeColor. Myślę, że bardziej sensowne jest, aby Kształt miał kolor niż Kolor miał kształt, więc wybrałbym ShapeColor.


4

Junction table

LUB Bridge Table

LUB Join Table

LUB Map Table

LUB Link Table

LUB Cross-Reference Table

Jest to używane w przypadku relacji wiele do wielu, w których klucze z obu tabel tworzą złożony klucz podstawowy tabeli skrzyżowań.


4

Zalecam użycie kombinacji nazw podmiotów i umieszczenie ich w liczbie mnogiej. Dlatego nazwa tabeli będzie wyrażać połączenie „wiele do wielu”.

W Twoim przypadku:

Color + Shape = ColorsShapes


Jeśli wybierasz trasę „nazwy tabel”, jest to lepsze, ponieważ wersja pojedyncza „zwykle” byłaby tabelą z przestrzenią nazw.
Andrew Haust,

3

Stół pośredni lub stół łączący

Nazwałbym to „ColorShapes” lub „ColorShape”, w zależności od twoich preferencji


3

Słyszałem również, że używany jest termin Tabela asocjacyjna .

nazwa tabeli może ColorShapeAssociationsoznaczać, że każdy wiersz reprezentuje skojarzenie między tym kolorem a kształtem. Istnienie rzędu oznacza, że ​​kolor ma ten kształt i że kształt ma ten kolor. Wszystkie wiersze z określonym kolorem byłyby zbiorem wszystkich kształtów, z którymi jest powiązany kolor, a wiersze dla określonego kształtu byłyby zbiorem wszystkich kolorów, w których pojawił się kształt ...


Ale jak nazwałbyś właściwy stół?
devuxer

To zależy od tego, co opisuje tabela. Jeśli mówi „cokolwiek pomarańczowego musi być rombem”, „cokolwiek fioletowego musi być okręgiem” itp., To możesz nazwać to jedną rzeczą (być może Colour_of_Shape). Jeśli jest to luźniejsza definicja - znane kolory dla kształtów, pozwalające na wielokrotne pojawianie się jednego kształtu - wtedy być może „Shape_Colour_Map”.
Jonathan Leffler

2

Generalnie większość baz danych ma jakąś konwencję nazewnictwa indeksów, klucza podstawowego i tak dalej. W PostgreSQL zasugerowano następujące nazewnictwo:

  • klucz podstawowy: nazwa_tabeli_nazwa_kolumny_ pkey
  • unikalne ograniczenie: nazwa_tabeli_nazwa_kolumny_ klucz
  • ograniczenie na wyłączność: nazwa_tabeli_nazwa_kolumny_ wył
  • indeks do innych celów: nazwa_tabeli_nazwa_kolumny_ idx
  • klucz obcy: nazwa_tabeli_nazwa_kolumny_ fkey
  • sekwencja: nazwa_tabeli_nazwa_kolumny_ seq
  • wyzwalacze: tablename_actionname_after | before_ trygonometrii

Twój stół jest dla mnie połączonym stołem. Aby zachować zgodność z powyższym nazewnictwem, wybrałbym następujące:

  • tabela połączona: nazwa_tabeli1_nazwa_tabeli2_ lnk

Na liście obiektów tabeli połączona tabela będzie znajdować się po nazwie tabeli1. To może być bardziej atrakcyjne wizualnie. Ale możesz też wybrać nazwę opisującą cel łącza, tak jak sugerowali inni. Może to pomóc w utrzymaniu krótkiej nazwy kolumny id (jeśli twój link musi mieć swój własny nazwany id i odwołuje się do niego w innych tabelach).

  • lub lubiłem tabela: purposename_ lnk

1
Stary dobry węgierski zapis, znów się spotykamy.
Dan Bechard

1

Zawsze miałem słabość do określenia „stół z hamburgerami”. Nie wiem dlaczego - po prostu brzmi dobrze.

Aha, i nazwałbym tę tabelę ShapeColor lub ColorShape w zależności od tego, która jest częściej używana.


1

Tabela „Wiele-Wiele”. Nazwałbym to „ColourShape” lub odwrotnie.


1

Trudno odpowiedzieć na coś tak arbitralnego, jak to, ale wolę raczej pomysł Tosha, aby nazwać to na cześć czegoś z rzeczywistej domeny, zamiast jakiegoś ogólnego opisu podstawowych relacji.

Dość często tego rodzaju tabele ewoluują w coś bogatszego dla modelu domeny i przyjmują dodatkowe atrybuty poza połączonymi kluczami obcymi.

Na przykład, co zrobić, jeśli oprócz koloru musisz przechowywać teksturę? Może wydawać się nieco dziwne, aby rozszerzyć tabelę SHAPE_COLOR, aby zachować jej teksturę.

Z drugiej strony jest też coś do powiedzenia na temat podejmowania świadomej decyzji w oparciu o obecne wymagania i przygotowania się do refaktoryzacji, gdy dodatkowe wymagania zostaną wprowadzone później.

Wszystko to powiedziawszy, nazwałbym to POWIERZCHNIĄ, gdybym wiedział, że pojawią się dodatkowe właściwości podobne do powierzchni wprowadzone później. Jeśli nie, bez problemu nazwałbym to SHAPE_COLOR lub czymś w tym rodzaju i przechodząc do bardziej palących problemów projektowych.


1

Może po prostu ColoredShape?

Nie jestem pewien, czy dostałem pytanie. Czy chodzi o ten konkretny przypadek, czy szukasz ogólnych wskazówek?


0

Nazwałbym go dokładnymi nazwami łączonych tabel = ColorShape.


0

W nawiązaniu do tego, co wiąże się z grafiką programisty,

ColorShape

byłaby zwykłą konwencją nazewnictwa. Na diagramie ER byłaby to relacja.


0

Nazwij to tabelą porównawczą.

XREF_COLOR_SHAPE
(
     XCS_ID INTEGER
     C_ID   INTEGER
     S_ID   INTEGER
)

0

Używałbym r_shape_colorslub w r_shape_colorzależności od jego znaczenia.
r_byłby zamiennikiem xref_w tym przypadku.


0

Mój głos dotyczy nazwy, która najlepiej opisuje tabelę. W tym przypadku może tak być, ShapeColorale w wielu przypadkach nazwa inna niż konkatenacja jest lepsza. Podoba mi się czytelność i dla mnie oznacza to brak sufiksów, podkreślników i przedrostków.


0

Osobiście wybrałbym Colour_Shape z podkreśleniem: tylko dlatego, że widziałem, jak ta konwencja pojawia się dość często. [ale zgadzam się z innymi postami tutaj, że są prawdopodobnie bardziej „poetyckie” sposoby na zrobienie tego].

Należy pamiętać, że klucze obce powinny być również zbudowane na tej tabeli łączenia, która odwoływałaby się do tabel kolorów i kształtów, co również pomogłoby w identyfikacji relacji.


0

Konwencją, którą widzę wiele w łączeniu stołów, która osobiście mi się podoba, jest „Colour_v_Shape”, który, jak słyszałem, ludzie nazywają potocznie „kontra stoły”.

Już na pierwszy rzut oka bardzo jasno widać, że tabela przedstawia relację wiele do wielu i pomaga uniknąć tej (choć rzadkiej) mylącej sytuacji, gdy próbujesz połączyć dwa słowa, które w przeciwnym razie mogłyby tworzyć słowo złożone, na przykład „Masło” a „Mleko” może stać się „Maślanką”, ale co by było, gdybyś musiał również reprezentować podmiot o nazwie „Maślanka”?

Robiąc to w ten sposób, uzyskasz „Butter_v_Milk” i „Buttermilk” - bez zamieszania.

Lubię też myśleć, że w oryginalnym pytaniu jest odniesienie do Foo Fighters.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.