【发布时间】:2014-08-07 15:26:20
【问题描述】:
我的情况类似于问题Nested data data modelling in Cassandra?中描述的情况
我有一个项目实体,我的应用需要能够为其显示项目特定信息,包括参与该项目的机构和供应商。项目实体可描述如下:
{
"id": 7162fe80-1e44-11e4-8c21-0800200c9a66,
"name": "Test Project",
"synopsis": "Lorem Text goes here"
"agencies" : [{
"id": c3e28810-1e44-11e4-8c21-0800200c9a66
"name": "Test Agency"
}],
"vendors": [{
"id": 1c0ba760-1e45-11e4-8c21-0800200c9a66
"name": "Test Vendor"
}]
}
但是,有时项目可能没有任何供应商或代理机构(或者可能有其中一个实体,但没有另一个):
{
"id": 7162fe80-1e44-11e4-8c21-0800200c9a66,
"name": "Test Project",
"synopsis": "Lorem Text goes here"
"agencies" : [],
"vendors": []
}
什么是对这些数据建模的好方法?
我尝试了以下架构,但似乎都有问题:
架构 1:
CREATE TABLE projects (
id uuid,
name text,
synopsis text,
vendor_id uuid,
vendor_name text,
agency_id uuid,
agency_name text
PRIMARY KEY (id, vendor_id, agency_id)
但是通过这种方法,我不能拥有没有供应商或代理机构的项目(vendor_id 或 Agency_id 不能为空)。
架构 2:
CREATE TABLE projects (
id uuid,
name text,
synopsis text,
vendor_id uuid,
vendor_name text,
agency_id uuid,
agency_name text
PRIMARY KEY (id)
但是通过这种方法,每个项目我只能有一个供应商和一个代理机构。
我对使用地图/列表/集合来建模这些数据犹豫不决,因为这似乎是 CQL 2/3 中的一个新功能。我也担心“数据一致性”。例如,供应商名称经常更改,我希望项目能够反映供应商的“最新名称”。
【问题讨论】:
标签: cassandra data-modeling cassandra-2.0