Я программировал реляционную базу данных много лет, но теперь столкнулся с необычной и хитрой проблемой:
Я создаю приложение, которое должно иметь очень быстрые и легко определяемые объекты (пользователь). Затем экземпляры этих объектов могут быть созданы, обновлены, удалены и т. Д.
Есть два варианта, которые я могу придумать.
Вариант 1 - Динамически создаваемые таблицы
Первый вариант - написать движок для динамической генерации таблиц и вставить в них данные. Однако это может стать очень сложным, поскольку каждый запрос также должен быть динамическим или, по крайней мере, динамически создаваемыми хранимыми процедурами и т. Д.
Вариант 2 - сущность - ключ - шаблон значений
Это единственный реалистичный вариант, который я могу придумать, где у меня есть 5 структур таблицы:
EntityTypes
EntityTypeID int
EntityTypeName nvarchar (50)
Сущности
EntityID int
EntityTypeID int
FieldTypes
FieldTypeID int
FieldTypeName nvarchar (50)
SQLtype int
FieldValues
EntityID int
FIeldID int
Значение nvarchar (MAX)
Поля
FieldID int
FieldName nvarchar (50)
FieldTypeID int
Таблица "FieldValues" будет работать немного как таблица фактов хранилища данных, и все мои вставки / обновления будут работать, заполняя табличный параметр "Key / Value" и передавая его в SPROC (чтобы избежать множественных вставок / обновлений ).
Все таблицы будут сильно проиндексированы, и я получу много самостоятельных соединений для получения данных.
Я много читал о том, насколько плохи базы данных Key / Value, но для этой проблемы она все еще кажется лучшей.
Теперь мои вопросы!
- Кто-нибудь может предложить другой подход или схему, отличную от этих двух вариантов?
- Будет ли возможен второй вариант для наборов данных среднего размера (максимум 1 миллион строк)?
- Есть ли дальнейшая оптимизация для варианта 2, который я мог бы использовать?
Любое направление и советы высоко ценится!