Що слід назвати таблицею, яка відображає дві таблиці разом? [зачинено]


137

Скажімо, у мене дві таблиці:

Table: Color
Columns: Id, ColorName, ColorCode

Table: Shape
Columns: Id, ShapeName, VertexList

Як слід назвати таблицю, яка відображає кольори для форми?

Table: ???
Columns: ColorId, ShapeId

Псевдоніми ColorShape і ShapeColor для симетрії.
LukLed

2
Щойно я натрапив на подібне питання, якого я раніше не бачив: stackoverflow.com/questions/1764483/… . Деякі інші ідеї з цього потоку: Shape2Color, ShapeXColor, ShapeColorLink.
devuxer

Якби був стандарт іменування перехідних таблиць - тоді це не було б на основі думки. Тоді це була б відповідь на запитання. Закриваючи питання, ви відключаєте можливість того, хтось, як я, знаю, чи існують стандартні способи називання ваших таблиць з'єднання чи ні. Перегляньте, будь ласка, ті, хто його закрив ...
Леело

Відповіді:


187

У комп'ютерній науці є лише дві важкі речі: недійсність кешу та іменування речей
- Філ Карлтон

Створення хорошого імені для таблиці, яка представляє many-to-manyвідносини, полегшує відносини для читання та розуміння. Іноді пошук великого імені не є банальним, але зазвичай варто витратити трохи часу на роздуми.

Приклад: Readerі Newspaper.

А Newspaperє багато, Readersа Readerє багатоNewspapers

Ви можете зателефонувати у відносини, NewspaperReaderале ім’я на зразок Subscriptionможе краще передати таблицю.

Ім'я Subscriptionтакож є більш ідіоматичним у випадку, якщо ви хочете згодом зіставити таблицю з об'єктами.

Конвенція про іменування many-to-manyтаблиць - це об'єднання імен обох таблиць, які беруть участь у відношенні. ColourShapeбуло б розумним дефолтом у вашому випадку. З цього приводу я думаю, що Нік Д. придумав дві чудові пропозиції: Styleі Texture.


10
+1: добре сказано - ретельно вибране ім’я значно полегшить ремонтопридатність у майбутньому.
Преет Сангха

115
"У комп’ютерній науці є лише дві важкі речі: недійсність кешу, іменування речей та помилки" за одним "
Ніл МакГуйган

1
скажімо, якщо є категорія продуктів та інша категорія рецептів. для обох таблиць у нас будуть рецепти_категорій та продуктів_категорій, і оскільки ми не можемо просто назвати таблицю "категорії" для обох таблиць, щоб уникнути конфлікту, таблиці з'єднання для продукту та рецепту будуть "рецепт_реципе_категорії" та "продукт_продукт_категорії"
c9s

3
Суворо логічно кажучи, що з'єднувальна інформація не означає додавання нової інформації. Я думаю, що це відбувається, коли ви намагаєтесь знайти відповідне слово для розв'язних таблиць. Люди, які читають газети, не роблять їх передплатниками, і фігур без кольору немає. Використовуючи "передплатники", додають нову інформацію (сенс) під час підключення читачів до газет. І немає слів, які б описували зв’язок форми та кольору - ніколи не було щось протилежне, таким чином, не було назви цього. Пам'ятайте, що немає нових атрибутів, наведених у таблиці переходу.
Леало


22

Цікаво, що половина відповідей дає загальний термін для будь-якої таблиці, яка реалізує взаємозв'язок "багато хто", а інша половина відповідей пропонує назву цієї конкретної таблиці.

Я взагалі називав ці таблиці перетинами таблиць .

Щодо конвенцій про іменування, більшість людей дають ім’я, яке є об'єднанням двох таблиць у відносинах «багато-багато». Тож у цьому випадку " ColorShape" або " ShapeColor." Але я вважаю, що це виглядає штучно і незручно.

Джо Селко рекомендує у своїй книзі "Стиль програмування SQL" називати ці таблиці якимось природним мовою. Наприклад, якщо Форма забарвлена ​​кольором, то назвіть таблицю ColoredBy. Тоді у вас може бути діаграма, яка більш-менш читає природно так:

Shape <-- ColoredBy --> Color

І навпаки, можна сказати Кольорові кольори форму:

Color <-- Colors --> Shape

Але це схоже на те, що середній стіл - це те саме, що і Colorу формі множинного іменування. Занадто заплутано.

Напевно, найбільш зрозуміло використовувати ColoredByконвенцію про іменування. Цікаво, що використання пасивного голосу робить угоду іменування більш зрозумілою.


Білл, спасибі Дуже цікава відповідь.
devuxer

@Bill: Все про синоніми, а перевага синоніму впливає на режим іменування.
OMG Ponies

2
Я припускаю, що HasColorможе бути інша можлива назва таблиці перетину, яка використовує природну мову.
Білл Карвін

1
@Bill: Проблема, яку я маю з цією умовою іменування, hasColour/ ColouredByдля чого? Це перемагає мета називання, яку потрібно використовувати DESCRIBEдля з'ясування стосунків.
OMG Ponies

5
Як у коментарі OMG Ponies, що трапиться, якщо інші речі можуть мати колір? Якщо у мене є інша таблиця, яка відображає текст на колір, мені знадобиться унікальна назва. Може, ShapeHasColorі TextHasColor?
devuxer

20

Назвіть таблицю, що вам подобається, якщо вона є інформативною:

COLOR_SHAPE_XREF

З точки зору моделі, таблицю називають таблицею з'єднання / супроводу / перехресної посилання. Я зберіг звичку використовувати _XREFв кінці, щоб зробити стосунки очевидними.


1
Я теж використовую _XREF ... це завжди має сенс для мене.
Джеймс Кронен

Я копаю ідею, але як користувач AutoCAD мені потрібно знайти інший суфікс, ніж _XREF ...
Майк,

7

Це асоціативна сутність і досить часто є важливою саме по собі.

Наприклад, багато-багато стосунків між НАВЧАМИ ТА ЧАСАМИ породжують ЧАС.

Якщо немає жодної очевидної нової сутності (наприклад, розклад), тоді умовою є запускати два слова разом, даючи COLOUR_SHAPE або подібні.


6

Таблиця відображення - це те, що зазвичай називається.

ColorToShape
ColorToShapeMap

Власне, термін "Картографування" зазвичай використовується, коли відносини односпрямовані (один до одного чи багатьох). Якщо так, то вам взагалі не потрібна інша таблиця. Якщо колір завжди визначає форму, то додайте стовпчик фігури до таблиці кольорів, або навпаки. Додаткова таблиця, як правило, потрібна лише тоді, коли відносини є багатьма для багатьох. І в цьому випадку термін відображення не підходить.
Чарльз Бретана

У цьому випадку будь-яка форма може бути підібрана до будь-якого кольору, тому це багато-до-багатьох.
devuxer

2
BTW, будь то таблиця відображення чи ні, мені якось подобається ідея використання Toв назві. Що робити, якщо у вас є форма з HighlightColor. Якщо ви називаєте це ShapeHighlightColor, це трохи неоднозначно, чи це ShapeHighlight, відображений у кольорі, або Shape, відображений у кольорі виділення. Отже, ShapeToHighlightColorможе бути зрозуміліше.
devuxer

FYI: Oracle (у будь-якому випадку 9i / 10г) має обмеження на 32 символи для імен таблиць, тому ви не можете отримати занадто багатослівний характер.
OMG Ponies

Відповідь я використав вище, але трохи по-іншому. тобто Color_Shape_Map. Конвенція: Таблиця1_Таблиця2_Карта
Золота рибка

6

Я працював з DBA, які називають це таблицею приєднання .

Colour_Shape досить типовий - якщо тільки стосунки не мають явного доменного імені.


1
Мені не подобаються підкреслення, оскільки вони суперечать конвенціям про іменування іноземних ключів таким чином, що ви стикаєтесь з неприємними іменами як Colour_Shape_Colourі Colour_Shape_Shape.
Ден Бешард

4

Зазвичай я чую, що називається "Розміщення таблиці". Я називаю таблицю за тим, до чого вона приєднується, тому у вашому випадку або ColorShape, або ShapeColor. Я думаю, що для Shape має більше сенсу мати колір, ніж для Color, щоб мати форму, тому я б пішов з цим ShapeColor.


4

Junction table

АБО Bridge Table

АБО Join Table

АБО Map Table

АБО Link Table

АБО Cross-Reference Table

Це застосовується, коли ми переходимо до відносин багато-багато-багато, де ключі обох таблиць утворюють складений первинний ключ таблиці з'єднання.


4

Я рекомендую використовувати комбінацію назв утворень і поставити їх у множині. Таким чином, назва таблиці виражатиме зв'язок "багато-до-багатьох".

У вашому випадку:

Колір + Форма = Кольори


Якщо ви їдете по маршруту "назви таблиць", це краще, оскільки сингулярна версія буде, як правило, таблицею, розміщеною з іменами.
Ендрю Хауст

3

Проміжна таблиця або таблиця приєднання

Я б назвав це "ColorShapes" або "ColorShape", залежно від ваших уподобань


3

Я також чув термін " Асоціативна таблиця".

Назва таблиці може ColorShapeAssociationsозначати, що кожен рядок являє собою асоціацію між цим кольором і цією формою. Наявність рядка означає, що колір набуває такої форми, а форма - у цьому кольорі. Усі рядки з певним кольором - це набір усіх фігур, з якими асоціюється колір, а рядки для певної форми - це набір усіх кольорів, які фігурують.


Але як би ви назвали фактичну таблицю?
devuxer

Це залежить від того, що описує таблиця. Якщо в ній написано: «що-небудь помаранчеве повинно бути ромбом», «все, що має фіолетове, повинно бути коло» тощо, то ви можете назвати це одне (можливо, Colour_of_Shape). Якщо це більш вільне визначення - відомі кольори для форм, що дозволяють одній фігурі з’являтися багато разів - то, можливо, "Shape_Colour_Map".
Джонатан Леффлер

2

Загалом, більшість баз даних мають певну умову іменування індексів, первинного ключа тощо. У PostgreSQL запропоновано такі імена:

  • первинний ключ: ім'я таблиці_кольону_ pkey
  • унікальне обмеження: ключ імені таблиці_спілки__
  • виняткове обмеження: tablename_columnname_ без
  • індекс для інших цілей: tablename_columnname_ idx
  • зовнішній ключ: tablename_columnname_ fkey
  • Послідовність: tablename_columnname_ сл
  • Тригери: tablename_actionname_after | before_ спрацьовую

Ваш стіл для мене пов'язаний стіл. Для того, щоб залишатися у відповідності з найменуванням вище, я вибрав би наступне:

  • пов'язана таблиця: ім'я таблиці1_таблиця2_ lnk

У списку об’єктів таблиці зв'язана таблиця буде після імені table1. Це може бути візуально привабливішим. Але ви також можете вибрати ім’я, яке описує мету посилання, як запропонували інші. Це може допомогти зберегти назву стовпця id коротким (якщо у посилання має бути власний ідентифікований ідентифікатор і посилається на нього в інших таблицях).

  • або сподобалася таблиця: namename_ lnk

1
Добре угорське позначення, ми знову зустрічаємось.
Dan Bechard

1

Я завжди був частковим до терміна "Гамбургерський стіл". Не знаю чому - це просто добре звучить.

О, і я б назвав таблицю ShapeColor або ColorShape залежно від того, яка є більш часто використовуваною таблицею.


1

Таблиця "Багато-багато". Я б назвав це "ColourShape" або навпаки.


1

Важко відповісти на щось таке довільне, як це, але я вважаю за краще віддавати ідею назвати її після чогось у реальній області, а не загального опису основних взаємозв'язків.

Досить часто ця таблиця перетворюється на щось багатше для доменної моделі і набуватиме додаткових атрибутів вище та поза пов'язаними зовнішніми ключами.

Наприклад, що робити, якщо вам потрібно зберегти текстуру, крім кольору? Розширити таблицю SHAPE_COLOR можна, здається, трохи фанк, щоб зберегти її текстуру.

З іншого боку, також можна щось сказати для прийняття добре обґрунтованого рішення, виходячи з того, які вимоги ви маєте сьогодні та чи готові ви відремонтувати, коли додаткові вимоги будуть введені пізніше.

Все, що було сказано, я би назвав це ПОВЕРХНЕЮ, якби мав уявлення про те, що додаткові поверхневі властивості будуть введені пізніше. Якщо ні, то я б не мав жодних проблем називати його SHAPE_COLOR або щось подібне і переходити до більш нагальних проблем дизайну.


1

Може, просто ColoredShape?

Я не впевнений, що отримую питання. Це стосується цього конкретного випадку чи ви шукаєте загальні вказівки?


0

Я б назвав це точними назвами таблиць, що з'єднуються = ColorShape.


0

Описуючись на те, що пов’язане мистецтво розробників,

ColorShape

було б звичайною умовою іменування. У діаграмі ER це було би відношення.


0

Назвіть це таблицю перехресних довідок.

XREF_COLOR_SHAPE
(
     XCS_ID INTEGER
     C_ID   INTEGER
     S_ID   INTEGER
)

0

Я б використовував r_shape_colorsабо r_shape_colorзалежно від його значення.
r_буде заміною xref_в цьому випадку.


0

Я голосую за ім’я, яке найкраще описує таблицю. У цьому випадку це може бути, ShapeColorале у багатьох випадках краще ім’я, відмінне від конкатенації. Мені подобається читабельність і для мене це означає, що немає суфіксів, без підкреслення і без префіксів.


0

Я особисто ходив би на Colour_Shape, підкреслюючи: лише тому, що бачив, як ця конвенція досить сильно з'являється. [але погоджуйтесь з іншими публікаціями тут, що, ймовірно, є більш "поетичні" способи цього зробити].

Майте на увазі, що на цій таблиці приєднання повинні бути вбудовані закордонні ключі, які б посилалися на таблиці кольорів і форм, що також допоможе визначити взаємозв'язок.


0

Конвенція, яку я бачу дуже багато для приєднання таблиць, які мені особисто подобаються, - це "Colour_v_Shape", яку я чув, як народ називає розмовно як "проти таблиць".

З першого погляду чітко видно, що таблиця являє собою відносини «багато до багатьох», і допомагає уникнути тієї (хоча і рідкісної) заплутаної ситуації, коли ви намагаєтесь поєднати два слова, які в іншому випадку можуть скласти складне слово, наприклад, «Масло» і "Молоко" може стати "Масломолочним молоком", але що робити, якщо вам також потрібно було представити організацію, що називається "Масло молоко"?

Зробивши це таким чином, у вас було б "Butter_v_Milk" і "Buttermilk" - ніякої плутанини.

Також мені подобається думати, що в оригінальному запитанні є посилання на Foo Fighters.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.