name convention для внешних идентификаторов
От: vsb Казахстан  
Дата: 12.09.22 16:04
Оценка:
У меня есть такое соглашение, что в любой таблице есть поле id (первичный ключ), а любая ссылка на таблицу sometable имеет суффикс sometable_id (чаще всего так и называется, иногда бывает надо несколько ссылок, тогда меняется префикс).

Таким образом у суффикса _id есть однозначное семантическое значение — это поле, указывающие на какую-то таблицу в текущей БД.

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

Хочется придумать замену этому суффиксу _id для внешних ключей.

Пока придумалось такое: _external_id — семантически почти идеально, но слишком длинно; _code — остановился пока на таком варианте, но не совсем доволен, всё-таки код и идентификатор это не всегда одно и то же; что-то вроде _eid, _exid, _extid — вариация на тему сокращения первого варианта.

Как бы вы на этот вопрос ответили, если бы вас охватил внезапный приступ перфекционизма?
Отредактировано 12.09.2022 16:04 vsb . Предыдущая версия .
Re: name convention для внешних идентификаторов
От: DiPaolo Россия  
Дата: 12.09.22 16:45
Оценка: 21 (1)
Как вариант — _fid (foreign ID).

Еще мысли вслух со стороны: e, ex и ext могут быть восприняты как extra или extended. То есть если кто-то будет смотреть на это свежим взглядом не зная конвенции, может возникнуть путаница.
Патриот здравого смысла
Re: name convention для внешних идентификаторов
От: · Великобритания  
Дата: 12.09.22 20:27
Оценка: 14 (1)
Здравствуйте, vsb, Вы писали:

vsb> Как бы вы на этот вопрос ответили, если бы вас охватил внезапный приступ перфекционизма?

key

Если я правильно помню терминологию это называется natural key.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Отредактировано 12.09.2022 20:28 · . Предыдущая версия .
Re: name convention для внешних идентификаторов
От: kov_serg Россия  
Дата: 12.09.22 22:11
Оценка: 14 (1) +1
Здравствуйте, vsb, Вы писали:

vsb>Как бы вы на этот вопрос ответили, если бы вас охватил внезапный приступ перфекционизма?

_rid от remote_id
Re: name convention для внешних идентификаторов
От: scf  
Дата: 13.09.22 05:41
Оценка: 14 (1)
Здравствуйте, vsb, Вы писали:

vsb>Как бы вы на этот вопрос ответили, если бы вас охватил внезапный приступ перфекционизма?


Я бы сделал префикс c именем внешней системы: github_user_id
Re[2]: name convention для внешних идентификаторов
От: Dym On Россия  
Дата: 13.09.22 07:48
Оценка: +1
Здравствуйте, ·, Вы писали:

·>Если я правильно помню терминологию это называется natural key.

Не, описываемый чаще всего суррогатный ключ.
Счастье — это Glück!
Re: name convention для внешних идентификаторов
От: Shtole  
Дата: 13.09.22 08:51
Оценка: 14 (1)
Здравствуйте, vsb, Вы писали:

vsb>Хочется придумать замену этому суффиксу _id для внешних ключей.

vsb>Пока придумалось такое: _external_id — семантически почти идеально, но слишком длинно;

Во-первых, в *_external_id суффикс по-прежнему id. Так это читается.

Во-вторых, мне сама идея заменить один суффикс на другой не кажется правильной. Если _id это всегда ссылка и всегда на таблицу с именем, предшествующим _id, то суффикс имеет смысл, всё ок. Но для внешних ключей, как и указано, нет никакой жёсткой схемы, что тогда там делает суффикс? Там тот факт, что это внешний идентификатор — просто часть назначения поля, поэтому я бы так и писал: id_for_yet_another_cloud_service (оформление, например, сокращения, добавить по вкусу).

Иными словами, я бы подумал, заслуживает ли вообще такой кейс, как хранение внешних идентификаторов своего суффикса.
Do you want to develop an app?
Отредактировано 13.09.2022 8:56 Shtole . Предыдущая версия .
Re[2]: name convention для внешних идентификаторов
От: vsb Казахстан  
Дата: 13.09.22 10:20
Оценка:
Здравствуйте, Shtole, Вы писали:

S>Иными словами, я бы подумал, заслуживает ли вообще такой кейс, как хранение внешних идентификаторов своего суффикса.


Я наверное не совсем понятно выразился. Я не хочу хранить внешние идентификаторы с определённым суффиксом. Просто у внешних идентификаторов имя id и его его хранить как есть, то возникает такая вот коллизия. Поэтому конкретно этот идентификатор (который часто встречается) хочется переименовать, но в идеале так, чтобы оставалось понятно, какое у него примерно было исходное имя.

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

Пока больше всего понравился _rid (remote id), предварительно на этом варианте остановлюсь, нравится больше, чем мой вариант с _code.
Re[3]: name convention для внешних идентификаторов
От: Shtole  
Дата: 13.09.22 10:59
Оценка: 14 (1)
Здравствуйте, vsb, Вы писали:

vsb>Я не хочу хранить внешние идентификаторы с определённым суффиксом.

...
vsb>Пока больше всего понравился _rid (remote id)

Я усматриваю между этими двумя предложениями некое противоречие

Всё-таки, _rid — это суффикс, как ни крути. Допустим, нужно хранить логин от Скайпа и схема id_for_skype не нравится (нужно общее впереди частного). Но тогда логично было бы назвать поле skype_id, а не skype_rid, правильно? Иначе я, если бы открыл такую БД и увидел такое поле, полез бы в документацию по Скайпу, искать, что такое rid. Если заменить rid на fid, лучше не станет. А на самом деле, даже если записать целиком, skype_remote_id или skype_external_id и не иметь никаких правил про суффиксы (т.е., идеальный случай), я, опять же, буду долго чесать в затылке, соображая, что за remote id такой (а это, на самом деле, просто id).

Получается, настоящая проблема в том, что нужно отличать id как суффикс и id как слово.

В языках с регистровой чувствительностью, типа сей, одно время было принято слова отделять регистром, а суффиксы и префиксы — подчёркиванием (m_MyWindow). Но для SQL это не вариант. Поэтому, лично у меня вариантов два:

1. Если неимоверно хочется избежать коллизий, придумать схему обозначения суффиксов. Например, _id — это слово, а __id — суффикс.
2. Забить. Так и писать skype_id. По контексту (отсутствию таблицы skype) легко догадаться, что это слово. Я бы выбрал его, в последнее время стараюсь не мудрить и не жертвовать читаемостью в угоду жёстким схемам. (Всякие BEM, например, для меня вообще выглядят как for robots, by robots ).
3 (бонус). Заменять id (как слово) на login, user и другие подходящие слова (можно даже userid одним словом). Не зная, о каких внешних сервисах идёт речь, нельзя сказать, насколько это уместно.
Do you want to develop an app?
Отредактировано 13.09.2022 11:16 Shtole . Предыдущая версия . Еще …
Отредактировано 13.09.2022 11:03 Shtole . Предыдущая версия .
Отредактировано 13.09.2022 11:02 Shtole . Предыдущая версия .
Re[3]: name convention для внешних идентификаторов
От: · Великобритания  
Дата: 13.09.22 19:48
Оценка: 5 (1)
Здравствуйте, Dym On, Вы писали:

DO> ·>Если я правильно помню терминологию это называется natural key.

DO> Не, описываемый чаще всего суррогатный ключ.
По-моему ты меня запутываешь, я всё правильно говорю.
С т.з. системы разрабатываемой топикстартером — это натуральный ключ (A natural key is a type of unique key in a database formed of attributes that exist and are used in the external world outside the database).
Суррогатным ключом являются его колонки id (A surrogate key in a database is a unique identifier for either an entity in the modeled world or an object in the database).
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.