Разработка таблицы для хранения данных EXIF - PullRequest
1 голос
/ 29 сентября 2011

Я стремлюсь добиться максимальной производительности от запроса таблицы, содержащей данные EXIF.Указанные запросы будут выполнять поиск только в данных EXIF ​​для указанных строк и возвращать индекс строки для совпадения.

С учетом сказанного, было бы лучше сохранить данные EXIF ​​в таблице с отдельными столбцами для каждого изтеги, или будет ли хранить все теги в одном столбце в виде одной длинной строки с разделителями?

Есть около 115 тегов EXIF, которые я буду хранить, и каждая запись будет около 1500до 2000 символов, если объединены в одну строку.

1 Ответ

3 голосов
/ 29 сентября 2011

Если вы храните их все в одном столбце, вы не сможете получить выигрыши в производительности от индексов. Вы также нарушите кардинальное правило проектирования базы данных, которое имеет свои последствия (в каждом столбце должен храниться только один фрагмент данных).

Я бы, вероятно, использовал структуру, подобную этой:

CREATE TABLE Image_EXIF (
    image_id    INT,
    exif_tag_id INT,
    exif_value  VARCHAR(100),  -- I don't know what an appropriate size would really be
    CONSTRAINT PK_Image_EXIF PRIMARY KEY CLUSTERED (image_id, exif_tag_id),
    CONSTRAINT FK_Image_EXIF_image_id FOREIGN KEY image_id REFERENCES Images (image_id),
    CONSTRAINT FK_Image_EXIF_exif_tag_id FOREIGN KEY exif_tag_id REFERENCES EXIF_Tags (exif_tag_id)
)

Таблица EXIF_Tags будет содержать все допустимые теги, а таблица Images будет содержать изображения. Затем вы можете иметь индексы для столбца exif_tag_id и, возможно, столбец exif_value для быстрого поиска.

...