无关系问题

pis*_*hio 6 couchdb mongodb nosql

我愿意认真对待MongoDB和CouchDB.到目前为止,我已经和Mongo一起工作了,但我也对Couch的RESTful方法很感兴趣.

在与关系数据库工作多年之后,我仍然没有得到用非关系数据库完成一些事情的最佳方法.

例如,如果我有1000个汽车商店和1000种汽车类型,我想指定每个商店销售的汽车类型.每辆车都有100个功能.在关系数据库中,我会制作一个中间表,将每个汽车商店与通过ID销售的汽车类型相关联.No-sql的方法是什么?如果每个汽车商店销售50种汽车类型,则意味着复制大量数据,如果我必须在汽车商店内存储其销售的所有汽车类型的所有功能!

任何帮助赞赏.

Gal*_*llo 0

从 HBase/BigTable 的角度来看,通常您会完全非规范化数据,并使用“列表”字段或多维映射列(请参阅此链接以获得更好的描述)。

“列”这个词是另一个像“表”和“基”一样负载沉重的词,它承载着多年 RDBMS 经验的情感包袱。

相反,我发现将其视为多维地图更容易 - 如果您愿意的话,可以将其视为地图的地图。

对于多对多关系的示例,您仍然可以创建两个表,并使用多维映射列来保存表之间的关系。

请参阅 Hadoop/HBase常见问题解答中的常见问题解答问题 20 :

问:[Michael Dagaev] 如何为两个实体(例如学生和课程)之间的多对多关联设计 Hbase 表?

我将定义两个表: 学生:学生 ID 学生数据(姓名、地址...) 课程(此处使用课程 ID 作为列限定符) 课程:课程 ID 课程数据(姓名、教学大纲...)学生(使用学生ids 作为列限定符)这有意义吗?

A[Jonathan Gray]:你的设计确实有意义。正如您所说,每个学生表和课程表中可能都有两个列族。一个用于数据,另一个用于每个学生或课程的一列。例如,学生行可能如下所示: Student : id/row/key = 1001 data:name = 学生姓名 data:address = 123 ABC St Courses:2001 = (如果您需要有关此关联的更多信息,例如,如果他们在等候名单上)课程:2002 = ...此模式使您可以快速访问查询,显示学生的所有课程(学生表,课程系列),或课程的所有学生(课程表,学生系列) )。