【发布时间】:2015-01-11 03:58:00
【问题描述】:
我几乎正在构建我的第一个 SQL 数据库,但不确定我是否正在以一种有效的方式处理事情。我的数据具有以下结构:我有一堆图像,我从每个图像中提取多个特征。特征由包含一个或多个浮点数的向量组成。所以我有图像、特征、矢量索引和数据值。
我目前的想法是有一个由 {image_id, feature_id, vector_index, data_value} 组成的表。我猜主键是 {image_id, feature_id, vector_index}。
在我看来,我有多个多对多关系,即多个索引可以对应一个特征,多个特征可以对应一个索引,多个图像可以对应同一个特征,多个特征可以对应相同的图像等。从我的互联网搜索看来,我应该制作链接表以提高效率,但我不知道该怎么做。任何帮助将不胜感激。
更新:
回顾一下:我有data_values,它们是浮点数。每个数据值都有属性image_id、feature_id 和vector_index。元组 {image_id, feature_id, vector_index} 唯一标识一个个体 data_value。
任意一对属性之间存在多对多关系: image_id:feature_id、image_id:vector_index 和 vector_index:feature_id。
典型查询:检索与image_ids 和feature_ids 的子集对应的所有数据值。我可能永远不会根据vector_index 进行过滤。对于我的应用程序,我需要将查询到的data_values 获取到一个二维矩阵中,其中每一行对应一个特定的image_id,每一列对应一个特定的 {feature_id, vector_index} 元组。
当前计划:摆脱vector_index。而是使用例如 JSON 将每个特征向量转换为单个字符串。用以下表格构建一个数据库:
images: {image_id (PK), image_name}
features: {feature_id (PK), feature_name}
data_values: {data_id (PK), image_id (FK), feature_id (FK), data_vector}
【问题讨论】:
-
要考虑的一件事是探索Postgres 对这个问题的适用性,因为它具有用于将结构化数据存储在单个列中的本机数组和 JSON 数据类型。这通常可以大大简化您的架构。
-
好的,谢谢,我去看看。
标签: mysql sql database database-design