具有多个多对多关系的数据库的高效设计

时间:2015-01-11 03:58:01

标签: mysql sql database database-design

我正在构建我的第一个SQL数据库,并且不确定我是否以有效的方式处理事情。我的数据具有以下结构:我有一堆图像,每个图像都提取了多个特征。特征由包含一个或多个浮点数的向量组成。所以我有图像,功能,矢量索引和数据值。

我目前的想法是有一个由{image_id,feature_id,vector_index,data_value}组成的表。我猜主键是{image_id,feature_id,vector_index}。

在我看来,我有多个多对多的关系,即多个索引可以对应单个特征,多个特征可以对应单个索引,多个图像可以对应同一个特征,多个特征可以对应于从我的互联网搜索看起来我似乎应该制作链接表以提高效率,但我无法弄清楚如何做到这一点。任何帮助将不胜感激。

更新:

回顾一下:我有data_values,这是浮点数。每个数据值都包含属性image_idfeature_idvector_index。元组{image_idfeature_idvector_index}唯一标识个人data_value

任何一对属性之间存在多对多关系: image_idfeature_idimage_idvector_index和{ {1}}:vector_index

典型查询:检索与feature_idimage_id的子集相对应的所有数据值。我可能永远不会根据feature_id进行过滤。对于我的应用程序,我需要将查询的vector_index放入2D矩阵中,其中每一行对应一个特定的data_value,每列对应一个特定的{image_id,{{1 tuple。

当前计划:摆脱feature_id。而是使用例如JSON将每个特征向量转换为单个字符串。使用以下表构建数据库:

vector_index

1 个答案:

答案 0 :(得分:1)

有一个表image和一个表feature并加入一个表image_feature,它有两列,一列是图像的主键,另一列是功能的主键