Database design 从rational样式建模到NoSql/Cassandra样式

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> <

我正在尝试将我的rational建模更改为Cassandra建模,我需要建模以下结构: 我有商店、促销和价格。 价目表包括特定商店中的所有商品及其价格。 促销清单包括促销详情(如折扣)、促销中包含的项目以及相关的消费俱乐部(如vip等) 门店id包含链id、子链id、门店id 列表就是这样的 商品(每家店):


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、客户俱乐部、日期吗