Одна вещь, которую вы не уточняете, это то, является ли число и / или имя атрибутов изменяемым или одинаковым для всех документов. Это несколько изменит мою рекомендацию.
Предполагая, что у вас есть дескриптор объекта, который уникально описывает данный документ, я предлагаю таблицу, которая управляет метаданными. Если у вас есть неизвестное количество атрибутов и неизвестные имена этих атрибутов, я рекомендую что-то вроде этого:
create table DocMetaData
(
DocumentHandle varchar NOT NULL,
MetaDataName varchar NOT NULL,
MetaDataText varchar NOT NULL
);
Затем вы вставляете в эту таблицу, когда у вас есть метаданные, используя наиболее подходящее имя. Если нет строки, нет метаданных. Если есть метаданные, у вас явно есть имя для этих метаданных и сами данные. Вы можете включить обнуляемость в самих метаданных, если вам нужно, хотя я бы, вероятно, просто сделал это пустым текстом (что-то вроде default ''
), а не пустыми, потому что вы получаете странное поведение (не получайте свою строку!) если вы выбрали столбец, а его там нет, и вы явно не запросили строки с нулевым значением. Помните, что этот дизайн не прописывает unique
, поэтому у вас есть возможность, сохраняйте только тогда, когда у вас есть данные ...
Конечно, если известны все возможные атрибуты метаданных, вы можете просто их прописать!
Создание динамических таблиц - КОРОЛЕВСКАЯ боль - я бы не стал делать это здесь.