Вопрос
Есть ли что-то неправильное или опасное в смешивании типов идентификаторов, чтобы гарантировать, что в ближайшем будущем у меня не кончатся ключи, или все типы в моей базе данных должны придерживаться одной и той же стратегии идентификации?
Детали
База данных, которую я создаю, потребует очень большого количества таблиц, а для некоторых из них (в частности, для таблиц соединений) потребуется ожирение записей из-за того, что некоторые элементы представляют собой совокупные корни, которые используются во многих местах со многими ко многим отношениям.
В то время как функциональный аспект работает нормально, я обеспокоен ограничениями столбца identity для определенных вещей. Занимаясь математикой, несложно предвидеть достижение пределов 32-битной идентичности в течение 2 с половиной лет работы. Сначала я подумал о том, чтобы использовать Guid для этих конкретных таблиц вместо 32-разрядного целого числа, однако у меня есть трепетное отношение к их смешиванию. Я слышал некоторые довольно плохие вещи об этой практике.
Я использую nHibernate
/ Fluent nHibernate
, чтобы создать свое сопоставление с моей базой данных. Но, например, у меня есть следующая структура ...
class Member : IIdentity<int>
{
public virtual int Id { get; set; }
}
class Page : IIdentity<Guid>
{
public virtual Guid Id { get; set; }
// multiple other properties
}
Существует не менее 8 объектов, которые имеют IList<Page>
, и Page
можно повторно использовать между несколькими объектами (следовательно, это отношение «многие ко многим»). Так что это определено в моем отображении, используя HasManyToMany
. Этот же принцип распространяется на несколько других объектов.