Таблица 1: Информация о документе (PK - идентификатор документа)
Таблица 2: Определения метаданных (PK - это идентификатор определения метаданных)
Таблица 3: идентификатор документа, идентификатор определения метаданных, значение метаданных
Самым большим недостатком этого является то, что вам нужно либо иметь один тип (вероятно, varchar), либо вам нужно иметь n столбцов (где n - это количество типов данных, которые вы хотите сохранить) ) и используйте столбец в таблице определений метаданных, чтобы определить, из какого столбца в таблице 3 следует извлечь значение.
Мое мнение о 5 перечисленных решениях:
- Растущие таблицы - это боль, и они могут вызвать проблемы в будущем (особенно, если вы хотите / нуждаетесь в значении метаданных, не допускающих значения NULL).
- Я ненавижу 'запасные общие столбцы' со страстью (хотя они популярны).
- Близко, но это ограничивает гибкость ваших метаданных даже больше, чем мое решение. Если ваши ключи и значения метаданных довольно просты, это может сработать.
- Я не совсем уверен, что вы подразумеваете под этим - это то же самое, что я предлагаю, или что-то еще?
- Мне не нравится хранить структурированный XML в RDBMS - вы теряете большую часть мощности RDBMS, делая это IMHO.
Это мои мысли - я никогда не проектировал подобную систему, но я имел дело с коммерческими системами, которые использовали несколько таких схем.