设计一个表来存储EXIF数据

时间:2011-09-29 03:52:34

标签: sql database sqlite exif system.data.sqlite

我希望通过查询包含EXIF数据的表来获得最佳性能。有问题的查询只会在EXIF数据中搜索指定的字符串,并在匹配时返回行索引。

话虽如此,最好将EXIF数据存储在一个表中,每个标签都有单独的列,或者将所有标签存储在一个列中,因为一个长分隔字符串也适合我? / p>

我将存储大约115个EXIF标签,如果连接成一个字符串,每条记录的长度大约为1500到2000个字符。

1 个答案:

答案 0 :(得分:3)

如果将它们全部存储在一个列中,您将无法从索引中获得性能优势。您还将违反数据库设计的基本规则,该规则有其自身的后果(每列只应存储一个数据)。

我可能会使用类似于此的结构:

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列上添加索引,以便快速搜索。