

# NoSQL Workbench 的示例数据模型
<a name="workbench.SampleModels"></a>

建模器的主页显示了一些随 NoSQL Workbench 提供的示例模型。本节介绍了这些模型及其潜在用途。

**Topics**
+ [员工数据模型](#workbench.SampleModels.EmployeeDataModel)
+ [论坛数据模型](#workbench.SampleModels.DiscussionForumDataModel)
+ [音乐库数据模型](#workbench.SampleModels.MusicLibraryDataModel)
+ [滑雪胜地数据模型](#workbench.SampleModels.SkiResortDataModel)
+ [信用卡优惠数据模型](#workbench.SampleModels.CreditCardOffersDataModel)
+ [书签数据模型](#workbench.SampleModels.BookmarksDataModel)

## 员工数据模型
<a name="workbench.SampleModels.EmployeeDataModel"></a>

该数据模型是一个入门模型。它表示员工的基本详细信息，例如唯一的别名、名字、姓氏、职务、经理和技能。

该数据模型描述了一些技术，例如处理复杂的属性，具有多种技能，等等。该模型也是经理及其下属员工建立的一对多关系示例，这是通过二级索引 DirectReports 实现的。

该数据模型实现的访问模式是：
+ 使用员工的登录别名检索员工记录，这是通过名为 `Employee` 的表实现的。
+ 按姓名搜索员工，这是通过名为 `Name` 的 Employee 表全局二级索引实现的。
+ 使用经理的登录别名检索经理的所有直接下属，这是通过名为 `DirectReports` 的 Employee 表全局二级索引实现的。

## 论坛数据模型
<a name="workbench.SampleModels.DiscussionForumDataModel"></a>

该数据模型表示一个论坛。通过使用该模型，客户可以加入开发人员社区，提问以及回复其他客户的帖子。每个 AWS 服务都有一个专门的论坛。任何人可以在论坛中发布消息以发起新的讨论话题，每个话题会收到任意数量的回复。

该数据模型实现的访问模式是：
+ 使用论坛的名称检索论坛记录，这是通过名为 `Forum` 的表实现的。
+ 检索论坛的特定话题或所有话题，这是通过名为 `Thread` 的表实现的。
+ 使用发布用户的电子邮件地址搜索回复，这是通过名为 `PostedBy-Message-Index` 的 Reply 表全局二级索引实现的。

## 音乐库数据模型
<a name="workbench.SampleModels.MusicLibraryDataModel"></a>

该数据模型表示一个音乐库，其中包含大量歌曲，并以近乎实时的方式展示下载最多的歌曲。

该数据模型实现的访问模式是：
+ 检索歌曲记录，这是通过名为 `Songs` 的表实现的。
+ 检索歌曲的特定下载记录或所有下载记录，这是通过名为 `Songs` 的表实现的。
+ 检索歌曲的特定月度下载数记录或所有月度下载数记录，这是通过名为 `Song` 的表实现的。
+ 检索歌曲的所有记录（包括歌曲记录、下载记录和月度下载数记录），这是通过名为 `Songs` 的表实现的。
+ 搜索下载最多的歌曲，这是通过名为 `DownloadsByMonth` 的 Songs 表全局二级索引实现的。

## 滑雪胜地数据模型
<a name="workbench.SampleModels.SkiResortDataModel"></a>

该数据模型表示一个滑雪胜地，该滑雪胜地每天收集每个滑雪缆车的大量数据。

该数据模型实现的访问模式是：
+ 检索给定滑雪缆车或整个滑雪胜地的所有数据（动态和静态），这是通过名为 `SkiLifts` 的表实现的。
+ 检索特定日期的滑雪缆车或整个滑雪胜地的所有动态数据（包括独特缆车乘员、积雪量、雪崩危险和缆车状态），这是通过名为 `SkiLifts` 的表实现的。
+ 检索特定滑雪缆车的所有静态数据（包括缆车是否仅供有经验的乘员使用、缆车上升的垂直高度和缆车乘坐时间），这是通过名为 `SkiLifts` 的表实现的。
+ 检索特定滑雪缆车或整个滑雪胜地的数据记录日期（按总独特乘员数排序），这是通过名为 `SkiLiftsByRiders` 的 SkiLifts 表全局二级索引实现的。

## 信用卡优惠数据模型
<a name="workbench.SampleModels.CreditCardOffersDataModel"></a>

该数据模型由信用卡优惠应用程序使用。

信用卡提供商在一段时间内提供优惠。这些优惠包括免费余额转账、增加信用额度、降低利率、现金返还和航空里程数。在客户接受或拒绝这些优惠后，将相应地更新优惠状态。

该数据模型实现的访问模式是：
+ 使用 `AccountId` 检索账户记录，这是通过主表实现的。
+ 检索几乎没有映射项目的所有账户，这是通过二级索引 `AccountIndex` 实现的。
+ 使用 `AccountId` 检索账户以及与这些账户关联的所有优惠记录，这是通过主表实现的。
+ 使用 `AccountId` 和 `OfferId` 检索账户以及与这些账户关联的特定优惠记录，这是通过主表实现的。
+ 使用 `ACCEPTED/DECLINED`、`OfferType` 和 `AccountId` 检索与账户关联的特定 `OfferType` 的所有 `Status` 优惠记录，这是通过二级索引 `GSI1` 实现的。
+ 使用 `OfferId` 检索优惠和关联的优惠项目记录，这是通过主表实现的。

## 书签数据模型
<a name="workbench.SampleModels.BookmarksDataModel"></a>

该数据模型是客户使用的存储书签。

一个客户可以具有很多书签，并且一个书签可以属于很多客户。该数据模型表示多对多关系。

该数据模型实现的访问模式是：
+ 现在，按 `customerId` 运行的单个查询可以返回客户数据以及书签。
+ 查询 `ByEmail` 索引按电子邮件地址返回客户数据。请注意，不会按该索引检索书签。
+ 查询 `ByUrl` 索引按 URL 获取书签数据。请注意，我们将 customerId 作为索引的排序键，因为多个客户可能为同一 URL 添加书签。
+ 查询 `ByCustomerFolder` 索引按文件夹获取每个客户的书签。