Столкнулся с проектом, в котором в качестве синтетических ключей используются uuid-ы. Надо сказать, я к такому подходу всегда относился очень скептически, но мне неожиданно здорово понравилось
( Read more... )
А что знаичит "если уж нашлась"? Вы их что, в тексте находите? Запись находится в таблице по своему ключу, если эта таблица собак, то код тут имеет смысл тольков этой таблице.
С другой стороны, что человеко-читаемые ключи много приятнее для глаза. Но гуиды к ним ну никак не относятся.
Не, можно сдуру сделать что-нибудь вида Users.FindByPK(dog_id) и пока глазами все не пересмотришь - не заметишь, если юзеров и собак одинаковое количество :)
Запись находится в таблице по своему ключу, если эта таблица собак, то код тут имеет смысл тольков этой таблице. Нет. Я могу сделать такое view:
select uuid, 'man' as type, 'Name:' || full_name || ', occupation:' || occupation as description from man union all select uuid, 'dog' as type, 'Name:' || name || ', owner:' || (select m.name from men m where m.uuid=d.owner_uuid) from dog union all select uuid, 'cat' as type, 'Name:' || name || ', owner:' || (select m.name from men m where m.uuid=d.owner_uuid) from cat union all ... не заморачиваясь с придумыванием ключей.
Это, кстати, одно из удобств при импорте данных из легаси базы (была одна такая, MS Commerce Server). Если есть uuid - значит, есть и тип данных, т.к. такой uuid будет только в одной из таблиц.
главная мегафича гуидов как синт ключей - это если есть несколько баз данных, которые реплицируются собщениями (которые идут попутными верблюдами, а не онлайн). Типично: центр и региональные филиалы в пердях.
индекс по uuid'ам только корежить будет. (в смысле что он будет пустой тратой памяти).
Посмотрите на twitter snowflake (лучше на какой нибудь безсерверный клон), почти так же хорошо как uuid, но они монотонно увеличиваются, следовательно потроха баз с ума не сходят
Comments 14
С другой стороны, что человеко-читаемые ключи много приятнее для глаза. Но гуиды к ним ну никак не относятся.
Reply
Reply
Reply
Нет. Я могу сделать такое view:
select uuid, 'man' as type, 'Name:' || full_name || ', occupation:' || occupation as description from man
union all
select uuid, 'dog' as type, 'Name:' || name || ', owner:' || (select m.name from men m where m.uuid=d.owner_uuid) from dog
union all
select uuid, 'cat' as type, 'Name:' || name || ', owner:' || (select m.name from men m where m.uuid=d.owner_uuid) from cat
union all
...
не заморачиваясь с придумыванием ключей.
Reply
Reply
Reply
Reply
Reply
Посмотрите на twitter snowflake (лучше на какой нибудь безсерверный клон),
почти так же хорошо как uuid, но они монотонно увеличиваются, следовательно потроха баз с ума не сходят
Reply
??
Reply
Leave a comment