Database design 从rational样式建模到NoSql/Cassandra样式
我正在尝试将我的rational建模更改为Cassandra建模,我需要建模以下结构: 我有商店、促销和价格。 价目表包括特定商店中的所有商品及其价格。 促销清单包括促销详情(如折扣)、促销中包含的项目以及相关的消费俱乐部(如vip等) 门店id包含链id、子链id、门店id 列表就是这样的 商品(每家店):Database design 从rational样式建模到NoSql/Cassandra样式,database-design,cassandra,nosql,Database Design,Cassandra,Nosql,我正在尝试将我的rational建模更改为Cassandra建模,我需要建模以下结构: 我有商店、促销和价格。 价目表包括特定商店中的所有商品及其价格。 促销清单包括促销详情(如折扣)、促销中包含的项目以及相关的消费俱乐部(如vip等) 门店id包含链id、子链id、门店id 列表就是这样的 商品(每家店): 7290027600007 001 001 11210000094 12.80 11210000216 29.40 这就是项目列表的外观 推广: <root> <
7290027600007
001
001
11210000094
12.80
11210000216
29.40
这就是项目列表的外观
推广:
<root>
<ChainId>7290027600007</ChainId>
<SubChainId>001</SubChainId>
<StoreId>001</StoreId>
<BikoretNo>9</BikoretNo>
<DllVerNo>8.0.0.0</DllVerNo>
<Promotions Count="1381">
<Promotion>
<PromotionId>168144</PromotionId>
<DiscountRate>10000</DiscountRate>
<PromotionItems Count="3">
<Item>
<ItemCode>11210000094</ItemCode>
</Item>
<Item>
<ItemCode>7290011078806</ItemCode>
</Item>
<Item>
<ItemCode>7290011078807</ItemCode>
</Item>
</PromotionItems>
<Clubs>
<ClubId>0</ClubId>
<ClubId>3</ClubId>
</Clubs>
<PromotionStartDate>2015-01-31</PromotionStartDate>
<PromotionEndDate>2015-12-31</PromotionEndDate>
</Promotion>
</Promotions>
</root>
7290027600007
001
001
9
8.0.0.0
168144
10000
11210000094
7290011078806
7290011078807
0
3.
2015-01-31
2015-12-31
非常频繁的查询可以是:
对于给定的商品列表,指定商店和消费者的代码
然后俱乐部获取所有相关物品的价格和所有相关物品
晋升
(即至少包含给定列表和消费者俱乐部中的一个项目,且当前日期介于开始日期和结束日期之间的促销活动)
因此,对于每个项目,我将获得价格和可选的相关促销(项目可以包含在多个促销中,也可以不包含,并且一个促销至少包含一个项目)
我如何建模?
一个选项是为每个单独的表和连接表(rational样式)创建:
CREATE TABLE IF NOT EXISTS promos_with_items(
promotionId varchar,
promotion_item varchar,
PRIMARY KEY(promotion_item,promotionId)
) WITH comment='Promotions with items';
CREATE TABLE IF NOT EXISTS promos(
chainid varchar,
subchainid varchar,
storeid varchar,
promotionId varchar,
start timestamp,
end timestamp,
discountRate double,
discountType int,
clubs set<int>
) WITH comment='Promotions';
CREATE TABLE IF NOT EXISTS Item(
chainid varchar,
subchainid varchar,
storeid varchar,
itemid varchar,
itemPrice double);
CREATE TABLE IF NOT EXISTS items_with_promos(
chainid varchar,
subchainid varchar,
storeid varchar,
itemid varchar,
itemPrice double
promotionId varchar,
start timestamp,
end timestamp,
discountRate double,
discountType int,
clubs set<int>
;
如果不存在带有项目的促销单,则创建表(
升级版varchar,
推广项目varchar,
主键(促销项目,促销ID)
)评论为“带项目的促销”;
如果不存在促销,则创建表(
chainid varchar,
亚柴尼德瓦尔查尔,
storeid varchar,
升级版varchar,
开始时间戳,
结束时间戳,
双倍贴现,
折扣类型int,
球杆组
)有评论说“促销”;
如果项目不存在,则创建表(
chainid varchar,
亚柴尼德瓦尔查尔,
storeid varchar,
itemid varchar,
项目价格(双倍);
另一个更具卡桑德拉风格的选择(但感觉不对)是一张桌子:
CREATE TABLE IF NOT EXISTS promos_with_items(
promotionId varchar,
promotion_item varchar,
PRIMARY KEY(promotion_item,promotionId)
) WITH comment='Promotions with items';
CREATE TABLE IF NOT EXISTS promos(
chainid varchar,
subchainid varchar,
storeid varchar,
promotionId varchar,
start timestamp,
end timestamp,
discountRate double,
discountType int,
clubs set<int>
) WITH comment='Promotions';
CREATE TABLE IF NOT EXISTS Item(
chainid varchar,
subchainid varchar,
storeid varchar,
itemid varchar,
itemPrice double);
CREATE TABLE IF NOT EXISTS items_with_promos(
chainid varchar,
subchainid varchar,
storeid varchar,
itemid varchar,
itemPrice double
promotionId varchar,
start timestamp,
end timestamp,
discountRate double,
discountType int,
clubs set<int>
;
如果不存在,则创建表\u和\u促销(
chainid varchar,
亚柴尼德瓦尔查尔,
storeid varchar,
itemid varchar,
价格加倍
升级版varchar,
开始时间戳,
结束时间戳,
双倍贴现,
折扣类型int,
球杆组
;
但是在这种情况下,如果该项目包含在多个促销活动中,或者如果该项目不包含在任何促销活动中,会发生什么情况
键/索引应该是什么?应该是chainid、subchainid、storeid、客户俱乐部、日期吗