【问题标题】:efficient design for database with multiple many to many relationships具有多个多对多关系的数据库的高效设计
【发布时间】:2015-01-11 03:58:00
【问题描述】:

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

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

在我看来,我有多个多对多关系,即多个索引可以对应一个特征,多个特征可以对应一个索引,多个图像可以对应同一个特征,多个特征可以对应相同的图像等。从我的互联网搜索看来,我应该制作链接表以提高效率,但我不知道该怎么做。任何帮助将不胜感激。

更新:

回顾一下:我有data_values,它们是浮点数。每个数据值都有属性image_idfeature_idvector_index。元组 {image_id, feature_id, vector_index} 唯一标识一个个体 data_value

任意一对属性之间存在多对多关系: image_id:feature_idimage_id:vector_indexvector_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


【解决方案1】:

有一个表 image 和一个表 feature 并加入一个表 image_feature 有两列,一列是图像的主键,另一列是特征的主键。

【讨论】:

  • 为什么只为imagefeature 制作链接表而忽略vector_index?在我看来,它们在质量上都是一样的。另外,data_values 会去哪里?
  • 什么是向量索引?什么是数据值 它们与图像和特征有何关系?
  • 一个特征提供了图像中内容的一些定量描述。每个特征都是一个由一个或多个浮点数组成的向量。数据值是这些浮点数之一。向量索引是一个整数,用于指定数据值在特征向量中的位置。
  • 例如,假设我有一张月亮的灰度图片,moon.jpg(图像)。我可以计算这张图片中灰度值的质心(一个特征)。这将产生一个 2 分量向量 COM = [com_x, com_y](数据值)。为了确保保持数据值的正确排序,我为每个整数分配一个整数,表示其在向量中的位置,例如com_x_index = 1, com_y_index = 2(向量索引)。因此,每个数据值都可以通过其 {image, feature, vector index} 元组唯一标识。
  • 将向量分解到这样的程度似乎适得其反,它闻起来像EAV,我会寻找一种方法将整个向量放在一行中。
猜你喜欢
  • 2011-05-03
  • 1970-01-01
  • 2011-04-13
  • 2012-09-30
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-09
相关资源
最近更新 更多