我几乎正在构建我的第一个 SQL 数据库,但不确定我是否正在以有效的方式处理事情。我的数据具有以下结构:我有一堆图像,我从每个图像中提取多个特征。一个特征由一个包含一个或多个 float 的向量组成。所以我有图像、特征、向量索引和数据值。
我目前的想法是拥有一个由{image_id,feature_id,vector_index,data_value}组成的表。我猜主键是 {image_id, feature_id, vector_index}。
在我看来,我有多个多对多关系,即多个索引可以对应于单个特征,多个特征可以对应于单个索引,多个图像可以对应于同一特征,多个特征可以对应于相同的图像等。从我的互联网搜索来看,我似乎应该制作链接表以使事情变得更有效率,但我不知道如何做到这一点。任何帮助将不胜感激。
更新:
回顾一下:我有 data_values
,它们是 float 。每个数据值都具有属性 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_id
和 feature_id
子集对应的所有数据值。我可能永远不会根据 vector_index
进行过滤。对于我的应用程序,我需要将查询的 data_value
获取到二维矩阵中,其中每行对应于特定的 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}
最佳答案
有一个表image
和一个表feature
,并将它们连接到一个具有两列的表image_feature
,其中一列是想象另一个是功能的主键。
关于mysql - 具有多个多对多关系的数据库的高效设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27883809/