LINUX.ORG.RU

[sql][советы][именования][соглашения] Хороший тон. Как обзывать many-to-many таблицы?

 ,


0

1

Вот, скажем, есть у нас таблица events.

И есть таблица event_types.

Как народ предпочитает обзывать таблицу их привязки?

— event_types_map
— event_types_index
— event_types_cross
— events2types
— … ?

Это один из моментов, по которому я промеж себя не выработал единой концепции. То так обзову, то эдак… Хочется унификации, но никак не могу выработать приоритетный подход :)

★★★★★

Нагугливаются варианты:

— events_types (потенциально не очень хорошо, что похоже на event_types)
— event_x_type (x = «cross»)

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от madcore

На Авиабазе подкинули вариант «lnk_evt_evttype» :)

KRoN73 ★★★★★
() автор топика

Я в таких случаях просто объединяю два названия:

events_and_event_types

soomrack ★★★★★
()

Из всех представленных вариантов более-менее выглядит разве что event_types_map :}

Deleted
()

по-хорошему имхо, таблица со связями должна быть как раз event_types, а список типов - чтото вроде refeventtypes или event_type_list.

arkhnchul ★★★
()

Я бы не стал мудрить - events_event_types. Множественное число у двух имён - многие ко многим. Всё понятно. И сохраняет общий стиль наименования.

P.S. Странный пример. Таблицы типов обычно являются словарём. Зачем тут вводить связку many-to-many, если в events можно id от event_types хранить?

stolz
()
Ответ на: комментарий от stolz

Зачем тут вводить связку many-to-many, если в events можно id от event_types хранить?

Потому что одно событие может быть нескольких типов.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от madcore

madcore

А если events могут к нескольким типам относиться?

Если так, то да.

stolz
()
Ответ на: комментарий от anon1984

банально, events_event_types

Больше всего голосов (аж два :D) собрал этот вариант. Хотя я бы, тогда, обозвал как events__event_types. Так составные индексы обычно обзываю.

Но мне пока что-то больше нравится вариант events_x_types. Новую таблицу так обозвал, но на будущее вопрос всё равно в целом открыт.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от madcore

*_link, *_links я видел в реальных проектах и в веб-движках каких-то.

А так же _map, _cross, _index — это всё реальные примеры. И даже мной используемые ранее :)

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от xorik

Таблицы надо называть в единственном числе

В ней содержится не одно событие, а множество.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от xorik

В каждой записи?

В таблице содержится _много_ записей по одному событию в каждой. _Много_ событий. В таблице, не в записи. Таблица != запись.

Ты папку с документами назовёшь «документ» или, всё же, «документы»?

KRoN73 ★★★★★
() автор топика

events_event_types - я такую схему использую обычно. Но вариант events_x_event_types тоже понравился.

Legioner ★★★★★
()

У нас так:

table1(pk, field1, field2, ...)
table2(pk, field3, field4,...)
table1_table2_xref(table1, table2) // many to many
table3(pk, table1, field5, ...) //table3 содержит FK на table1

roller ★★★
()

Так ещё можно, не во всех СУБД правда:
events.events
events.types
events.events_types

имеется ввиду разделение по схемам что бы короткие имена типа types не пересекались, тогда логичным именем для M2M становится соединение коротких имён events_types.

Eshkin_kot ★★
()

Помню нам в университете активно продвигали теорию, что таблица должна именоваться не мн. ч., а ед. ч., т.е. «event» вместо «events» и «event_type» вместо «event_types».

По поводу именования связок я не видел каких-либо стандартов. Видел в интернете пример, где название таблицы связки отражает не технический ее характер, а логический: таблицы Orders и Products соединяются через таблицу OrderLines.

Ian ★★
()

У меня в таких link фигурировало.

$имятаблицы1_$имятаблицы2_link, например

yoghurt ★★★★★
()
Ответ на: комментарий от GateKeeper

И после этого испражняться строительными блоками при попытке прикрутить ORM

А не пофиг, как базу обозвать с точки зрения ORM? Всё равно в одном месте же прописывается.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

Только те ORM, которые я видел по дефолту используют Plural от имени объекта в качестве таблицы. Т.о. приходится на каждую модель еще дополнительно минимум 1 строку писать, указывая явно имя таблицы, чего с множественным числом в именах таблиц делать не пришлось бы.

GateKeeper ★★
()
Ответ на: комментарий от GateKeeper

Т.о. приходится на каждую модель еще дополнительно минимум 1 строку писать

Ну, поскольку таблиц новых в день не по 100 штук вводить приходится, то это не принципиальный момент :) Явно не тянет на «сраньё кирпичами». У меня на одну дефолтовую таблицу обычно приходится с десяток недефолтового legacy.

В любом случае, задавать имя таблицы явно — это чуть-чуть быстрее, чем рассчитывать его из имени класса ;)

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

Зависит от палитры. Но использовать ORM-ные inflector'ы и подобные ништяки же дорого по CPU, значит, и ORM тоже дорого (даже дороже, чем inflector дернуть).

GateKeeper ★★
()
Ответ на: комментарий от GateKeeper

Только те ORM, которые я видел по дефолту используют Plural от имени объекта в качестве таблицы.

Это где так? В Хибернейте я подобного не припомню.

Absurd ★★★
()
Ответ на: комментарий от Absurd

Вот прямо сейчас приходится вертеть хвосты Kohana::ORM. Насколько помню, в алхимии тоже так было, если использовать декларативный стиль.

GateKeeper ★★
()
Ответ на: комментарий от GateKeeper

значит, и ORM тоже дорого

В частностях, если без извращений, то на загрузке единичных объектов и массивов оверхед от ORM практически нулевой. В любом случае такой, на фоне которого экономия в фиксированном имени таблицы уже немного заметна :)

KRoN73 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.