【问题标题】:Designing a table to store EXIF data设计一个表来存储 EXIF 数据
【发布时间】:2011-09-29 03:52:34
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    我可能会使用类似这样的结构:

    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 列上建立索引以进行快速搜索。

    【讨论】:

    • 那么对于Image 表中的每条记录,Image_EXIF 表中的记录应该是 115 条,对吗?
    猜你喜欢
    • 2011-07-21
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    相关资源
    最近更新 更多