LINUX.ORG.RU
 
KRoN73

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


0

1

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

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

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

— event_types_map
— event_types_index
— event_types_cross
— events2types
— … ?

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


[#]  
KRoN73

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

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

***** ()
[#]  

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

* ()
[#]  

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

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

* ()
[#] Ответ на: комментарий от stolz 28.11.2011 12:57:11  
KRoN73
>>-----Цитата---->>

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

<<-----Цитата----<<

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

***** ()
[#] Ответ на: комментарий от anon1984 28.11.2011 9:44:46  
KRoN73
>>-----Цитата---->>

банально, events_event_types

<<-----Цитата----<<

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

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

***** ()
[#] Ответ на: комментарий от madcore 28.11.2011 13:51:42  
KRoN73
>>-----Цитата---->>

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

<<-----Цитата----<<

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

***** ()
[#] Ответ на: комментарий от madcore 28.11.2011 13:51:42  
>>-----Цитата---->>

Масло маслянное.

<<-----Цитата----<<

почему? название отражает, какие таблицы связывает промежуточная таблица. *_link же хз что.

* ()
[#] Ответ на: комментарий от xorik 28.11.2011 14:53:26  
KRoN73
>>-----Цитата---->>

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

<<-----Цитата----<<

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

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

***** ()
[#]  

У нас так:

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

*** ()
[#]  
Eshkin_kot

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

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

** ()
[#]  
Ian

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

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

** ()
[#] Ответ на: комментарий от GateKeeper 28.11.2011 17:28:03  
KRoN73
>>-----Цитата---->>

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

<<-----Цитата----<<

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

***** ()
[#] Ответ на: комментарий от KRoN73 28.11.2011 17:39:14  

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

* ()
[#] Ответ на: комментарий от GateKeeper 28.11.2011 18:19:53  
KRoN73
>>-----Цитата---->>

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

<<-----Цитата----<<

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

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

***** ()
[#] Ответ на: комментарий от KRoN73 28.11.2011 18:34:50  

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

* ()
[#] Ответ на: комментарий от GateKeeper 28.11.2011 18:19:53  
Absurd
>>-----Цитата---->>

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

<<-----Цитата----<<

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

*** ()
[#] Ответ на: комментарий от Absurd 28.11.2011 18:38:38  

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

* ()
[#] Ответ на: комментарий от GateKeeper 28.11.2011 18:38:30  
KRoN73
>>-----Цитата---->>

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

<<-----Цитата----<<

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

***** ()