Разработка базы данных пользовательских полей с высокой степенью разнообразия - PullRequest
0 голосов
/ 22 декабря 2011

Я разрабатываю приложение SaaS для здравоохранения для управления деятельностью в нескольких организациях.Администратор каждой организации может создавать настраиваемые поля для бизнес-концепций.

Пример: пациент org X имеет атрибуты A и B, в то время как пациент org Y имеет атрибуты M и N

После проведения исследования я обнаружил, что существует несколько значительных подходов к проектированию:

Вариант 1 : иметь BusinessObjectCustomField для каждой бизнес-таблицы.Пример для PatientCustomField

OrgID,   CustomFieldID,   Value
X,       A,               1
X,       B,               2
Y,       M,               3
Y,       N,               4

Опция 2 : использовать одну таблицу для каждого бизнес-объекта, но изменять таблицу при добавлении нового настраиваемого поля.В результате num (столбец) ~ num (org) * num (среднее число полей на org)

PatientID    A      B      M      N
1            1      2      NULL   NULL
2            NULL   NULL   3      4

Опция 3 : использовать столбцы общего назначения для хранения данных.В результате num (столбец) ~ max (количество полей в организации)

PatientID    Col1   Col2
1            1      2
2            3      4

Опция 4 : сохранение пользовательских данных в формате XML

PatientID    CustomField
1            <custom><A>1</A><B>2</B></custom>
2            <custom><M>3</M><N>4</N></custom>

Вариант 5 : создание динамических таблиц на лету

Patient_1
PatientID    A    B
1            1    2

и

Patient_2
PatientID    M    N
1            3    4

Мои приоритеты проектирования:

  1. Хорошая производительность
  2. Подходит для изменения
  3. Легко кодировать
  4. Пробел (так как данных будет много)

Какой вариант выбрать?Я знаю, что MS SQL Server поддерживает индекс для данных XML, но обеспечивает ли он такую ​​же хорошую производительность, как и реляционная индексация?

Ссылки:

...