2014-04-18 3 views

ответ

2

Большинство людей, которые хотят, чтобы вы описали, используют uuid ключи - см. Расширение ossp-uuid для полезных функций генерации uuid.

Другой альтернативой является наличие одной последовательности, с которой вы получаете ключи от nextval. Все ваши ключевые поля будут хотеть быть bigint. Просто CREATE SEQUENCE business_object_key_seq;.

Ни один из вышеперечисленных случаев не позволяет вам использовать глобальную уникальность, не вмешиваясь со сложными триггерами. Хотя ни один из них не будет генерировать дублирующий ключ, так что вы не будете получать дубликаты, если ваш код не сделает ничего глупого, и вы все равно можете обеспечить уникальность в любой заданной таблице.

Другой подход, используемый некоторыми людьми, состоит в том, чтобы иметь таблицу с сгенерированным первичным ключом и ничего другого или, возможно, своего рода поле object_kind. Это может служить ссылкой на внешний ключ. Может показаться, что это позволяет вам применять уникальность, но на самом деле это довольно бесполезно, потому что это не мешает вам иметь строку с id = 42 как в t_a, так и в t_b.

+0

Благодарим вас за ответ ~ – Paul

+0

, если несколько таблиц используют одну последовательность, будет ли это нарушать производительность базы данных? – Paul

+0

Это не имело бы никакого значения. Там нет блокировки, связанной с последовательностями, и никаких утверждений. –

Смежные вопросы