Как рельсы приходят с идентификатором для новой модели / записи? - PullRequest
1 голос
/ 19 июля 2011

Как activerecord назначает идентификатор недавно созданной записи?Значения идентификаторов, кажется, повсюду.Иногда они последовательны, но иногда они кажутся чем-то вроде хэша.Есть ли способ контролировать поведение?

1 Ответ

1 голос
/ 19 июля 2011

В реляционной базе данных вы увидите, что идентификаторы обычно последовательны. В этих базах данных с Rails по умолчанию это автоматически увеличивающееся поле с именем id по умолчанию. Это 99% случаев, то есть в 99% случаев вы можете ожидать, что это будет сделано именно таким образом. Это вменяемый способ.

Однако в некоторых случаях поле id в базе данных может не увеличиваться автоматически и вместо этого может быть строкой. В базе данных, с которой я сейчас работаю, поле id называется client_id, представляет собой 6-символьную строку, например «RAB001», и ее нужно вручную назначать самим кодом. Это связано с устаревшей системой, которую мы поддерживаем, и мы ничего не можем сделать, чтобы это исправить. Это просто так.

В других базах данных, таких как Mongoid, идентификаторы снова генерируются автоматически. Здесь есть разница: вместо того, чтобы автоматически увеличивать числа, они представляют собой хэш. В базе данных Mongo мне пригодится одно из полей _id объекта (обратите внимание на подчеркивание) - это прекрасный, простой для понимания 1 хеш: 4e22b5812f8b7d6f6d000001. Это автоматически генерируется Mongo, и мне все равно, что это за исключением случаев, когда мне нужно найти объект, и нет другого способа найти его по другому уникальному значению.

Я бы порекомендовал придерживаться автоматически генерируемой системы ID, будь то что-то, предоставляемое традиционными системами баз данных, такими как PostgreSQL или MySQL, или что-то от Mongo.

Любая система, в которой вам необходимо сгенерировать первичный ключ для записи вручную, должна иметь огромную метку "HERE BE DRAGONS" на ней и должна обрабатываться как случай нитроглицерина или аналогично этой подходящей аналогии . Избегайте этой системы, если можете .


1 Я саркастичен здесь.

...