Как мне назвать таблицу, которая отображает две таблицы вместе? [закрыто]


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будет разумным по умолчанию в вашем случае. Тем не менее, я думаю , что Ник D придумал два больших предложений: Styleи Texture.


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

115
«В компьютерных науках есть только две сложные вещи: аннулирование кэша, присвоение имен и ошибки« один на один »
— Нил Макгиган

1
скажем, если есть категория для продуктов и другая категория для рецепта. для обеих таблиц у нас будут recipe_categories и product_categories, и, поскольку мы не можем просто «именовать» имя таблицы для обеих таблиц, во избежание конфликта соединительными таблицами для product и recipe будут «recipe_recipe_categories» и «product_product_categories»
— c9s

3
Строго логически говоря, соединительная информация не означает добавления новой информации. Я думаю, это то, что происходит, когда вы пытаетесь найти подходящее слово для соединительных таблиц. Люди, читающие газеты, не делают их подписчиками, и нет форм без цвета. Использование «подписчиков» - это добавление новой информации (смысл) при подключении читателей к газетам. И нет слов, чтобы описать связь формы и цвета - никогда не было чего-то противоположного, поэтому и нет названия. Помните, что в таблице соединений нет новых атрибутов.
— Лало

35

Как насчет ColorShapeMap или Стиль или Текстура .


5
+1 за то, что придумал что-то более изящное, чем просто объединение имен столов
— tosh

22

Интересно, что около половины ответов дают общий термин для любой таблицы, которая реализует отношение «многие ко многим», а другая половина ответов предлагает название для этой конкретной таблицы.

Я назвал эти таблицы пересечения таблиц в целом.

С точки зрения соглашений об именах, большинство людей дают имя, которое является объединением двух таблиц в отношении «многие ко многим». Так что в этом случае « ColorShape» или « ShapeColor.» Но я считаю, что это выглядит искусственно и неловко.

Джо Селко рекомендует в своей книге «Стиль программирования SQL» назвать эти таблицы в естественном языке. Например, если форма окрашена цветом, назовите таблицу ColoredBy. Тогда вы могли бы иметь диаграмму, которая более или менее читается естественным образом, как это:

Shape <-- ColoredBy --> Color

И наоборот, вы можете сказать, что Color окрашивает Shape:

Color <-- Colors --> Shape

Но похоже, что средняя таблица - это то же самое, что Colorи соглашение о присвоении имен во множественном числе. Слишком запутанно.

Вероятно, наиболее ясно использовать ColoredByсоглашение об именах. Интересно, что использование пассивного голоса делает соглашение об именах более понятным.


Билл, спасибо. Очень интересный ответ.
— devuxer

@Bill: все о синонимах, и предпочтение синонимов влияет на соглашение об именах.
— OMG Ponies

2
Я полагаю, HasColorможет быть другое возможное имя для таблицы пересечений, которая использует естественный язык.
— Билл Карвин

1
@ Билл: у меня проблема с этим соглашением об именах 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

На самом деле, термин Mapping обычно используется, когда отношения однонаправлены (один к одному или много). Является ли это caswe? Если это так, то, как правило, вам не нужен другой стол. Если цвет всегда определяет форму, добавьте столбец формы в таблицу цветов или наоборот. Дополнительная таблица обычно нужна только тогда, когда отношение много ко многим. И в этом случае термин «отображение» не подходит.
— Чарльз Бретана

В этом случае любая форма может быть подобрана к любому цвету, так что это многие ко многим.
— devuxer

2
КСТАТИ, будь то таблица сопоставления или нет, мне нравится идея использовать Toв названии. Что делать, если у вас есть форма с HighlightColor. Если вы это называете ShapeHighlightColor, это будет немного двусмысленно, будь то ShapeHighlight, сопоставленный с цветом, или Shape, сопоставленный с цветом подсветки. Так что, ShapeToHighlightColorможет быть, более понятно.
— devuxer

К вашему сведению: Oracle (9i / 10g в любом случае) имеет ограничение в 32 символа для имен таблиц, поэтому вы не можете получить слишком многословно.
— OMG Ponies

Я использовал ответ выше, но немного по-другому. то есть Color_Shape_Map. Соглашение: Table1_Table2_Map
— Золотая рыбка

6

Я работал с администраторами баз данных, которые называют это таблицей соединений .

Colour_Shape довольно типично - если только отношение не имеет явного доменно-специфического имени.


1
Мне не нравятся подчеркивания, потому что они конфликтуют с соглашениями об именах внешних ключей, так что в итоге вы получите неприятные имена, такие как Colour_Shape_Colourи Colour_Shape_Shape.
— Дэн Бешард

4

Я обычно слышу, что называется Junction Table. Я называю таблицу тем, к чему она присоединяется, поэтому в вашем случае это либо ColorShape, либо ShapeColor. Я думаю, что для Shape более логично иметь цвет, чем для Color иметь форму, поэтому я бы согласился ShapeColor.


4

Junction table

ИЛИ Bridge Table

ИЛИ Join Table

ИЛИ Map Table

ИЛИ Link Table

ИЛИ Cross-Reference Table

Это начинает использоваться, когда мы используем отношения «многие ко многим», когда ключи из обеих таблиц образуют составной первичный ключ соединительной таблицы.


4

Я рекомендую использовать комбинацию названий сущностей и поместить их во множественное число. Таким образом, имя таблицы будет выражать связь «многие ко многим».

В твоем случае:

Color + Shape = ColorsShapes


Если вы идете по маршруту «имена таблиц», это лучше, поскольку единственная версия «обычно» будет таблицей с пространством имен.
— Эндрю Хауст

3

Промежуточный Стол или Стол Соединения

Я бы назвал его «ColorShapes» или «ColorShape», в зависимости от ваших предпочтений


3

Я также слышал термин « ассоциативная таблица».

имя для вашей таблицы может ColorShapeAssociationsозначать, что каждая строка представляет связь между этим цветом и этой формой. Наличие ряда подразумевает, что цвет приходит в эту форму, и что форма приходит в этот цвет. Все строки с определенным цветом будут представлять собой набор всех фигур, с которыми связан цвет, а строки для определенной формы будут представлять собой набор всех цветов, в которые входит эта форма ...


Но как бы вы назвали настоящую таблицу?
— devuxer

Это зависит от того, что описывает таблица. Если там написано «что-нибудь оранжевое, должно быть, ромб», «что-то фиолетовое, должно быть, кружок» и т. Д., То вы можете назвать это одной вещью (возможно, Colour_of_Shape). Если это более слабое определение - известные цвета для фигур, позволяющие одной фигуре появляться много раз - тогда, возможно, Shape_Colour_Map.
— Джонатан Леффлер

2

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

  • первичный ключ: tablename_columnname_ pkey
  • уникальное ограничение: ключ tablename_columnname_
  • исключительное ограничение: tablename_columnname_ excl
  • индекс для других целей: tablename_columnname_ idx
  • внешний ключ: tablename_columnname_ fkey
  • последовательность: tablename_columnname_ seq
  • Триггеры: tablename_actionname_after | before_ срабатываю

Ваш стол для меня является связанным столом. Чтобы соответствовать приведенному выше названию, я бы выбрал следующее:

  • связанная таблица: tablename1_tablename2_ lnk

В списке объектов таблицы связанная таблица будет после tablename1. Это может быть визуально более привлекательным. Но вы также можете выбрать имя, которое описывает цель ссылки, как предлагали другие. Это может помочь в сокращении имени столбца id (если ваша ссылка должна иметь собственный именованный идентификатор и на него есть ссылки в других таблицах).

  • или понравилась таблица: purposename_ LNK

1
Хорошая старая венгерская запись, мы встречаемся снова.
— Дэн Бешард

1

Я всегда был неравнодушен к термину «Таблица гамбургеров». Не знаю почему - это звучит просто хорошо.

О, и я бы назвал таблицу ShapeColor или ColorShape в зависимости от того, какая таблица используется чаще.


1

Стол «Много-Много». Я бы назвал это «ColourShape» или наоборот.


1

Трудно ответить на что-то столь произвольное, как это, но я склонен предпочесть идею Тоша назвать ее после чего-то в реальной области, а не какое-то общее описание базовых отношений.

Зачастую таблица такого рода превращается в нечто более богатое для модели предметной области и приобретает дополнительные атрибуты помимо связанных внешних ключей.

Например, что если вам нужно хранить текстуру в дополнение к цвету? Может показаться немного странным расширение таблицы SHAPE_COLOR для хранения ее текстуры.

С другой стороны, есть еще что сказать для принятия обоснованного решения, основанного на том, какие требования вы предъявляете сегодня, и готовности к рефакторингу, когда дополнительные требования будут введены позже.

Все это говорит о том, что я бы назвал это ПОВЕРХНОСТЬ, если бы у меня было понимание того, что позже появятся дополнительные свойства, подобные поверхностным. В противном случае у меня не возникло бы проблем с тем, чтобы назвать это SHAPE_COLOR или что-то в этом роде и перейти к более насущным проблемам дизайна.


1

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

Я не уверен, что понял вопрос. Это об этом конкретном случае или вы ищете общие рекомендации?


0

Я бы назвал его точными именами соединяемых таблиц = ColorShape.


0

В дополнение к тому, что разработчик Art связан,

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 с подчеркиванием: только потому, что я видел, что эта конвенция довольно сильно выросла. [но согласен с другими постами здесь, что, возможно, есть более «поэтические» способы сделать это].

Помните, что внешние ключи также должны быть построены на этой таблице соединений, которая будет ссылаться как на таблицы Color & Shape, так и на идентификацию взаимосвязи.


0

Я часто вижу соглашение о присоединении к таблицам, которое мне лично нравится, «Colour_v_Shape», которое, как я слышал, в народе называют «против таблиц».

С первого взгляда становится ясно, что таблица представляет отношение «многие ко многим», и помогает избежать этой (хотя и редкой) запутанной ситуации, когда вы пытаетесь объединить два слова, которые в противном случае могли бы образовать составное слово, например «Масло». и «Молоко» может стать «Молочным молоком», но что, если вам также необходимо представить сущность под названием «Пахта»?

Делая это таким образом, вы получите «Butter_v_Milk» и «Buttermilk» - без путаницы.

Кроме того, мне нравится думать, что в оригинальном вопросе есть ссылка на Foo Fighters.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.