3

嗨,我是发电机数据库的新手,据我所知,它是一个非关系数据库,即我们无法加入表格。我的疑问是我们如何设计表结构。请通过以下示例进行说明。

我有以下表格 1) 用户 - 用户 ID、用户名、密码、电子邮件、电话号码、角色 2) 角色 - id、姓名 [即管理员、主管等]

a)我的第一个疑问是我们是否有任何规定可以为 user_id 字段设置自动增量?b) 这是将主键设置为 user_id 的正确方法吗?c)这是在发电机数据库中存储用户角色的正确方法吗?即角色表包含​​ id 和 title 并在用户表中存储角色 id?e) 这是否可以与每个用户一起检索两个表数据?我正在使用 rails 3 和 aws-sdk gem

如果有人回复,这对我很有帮助,就像一个新的 dynamodb 用户

4

2 回答 2

6

通常使用 nosql 样式数据库,您将提供唯一标识符,而不是让自动增量 PK 字段为您执行此操作。这通常意味着您将有一个 GUID 作为每个用户记录的键。

就用户角色而言,有很多方法可以实现这一点,每种方法都有好处和问题:

一种简单的方法是将“角色”属性添加到用户表,并为该用户的每个角色添加一个条目。然后您可以获取用户,您将在一个查询中拥有所有角色。DynamoDB 允许属性有多个值,因此每个角色一个属性可以有一个值。

如果您需要能够查询特定角色的用户(即“给我所有主管用户”),那么您将在 DynamoDB 中进行表扫描,这可能是一项昂贵的操作。但是,如果您的用户数量相当少,并且很少需要进行这种查找,那么这对于您的应用程序来说仍然是可以接受的。

如果您确实需要经常进行这种昂贵的查找类型,那么您将需要创建一个类似于“RolesWithUsers”的新表,每个角色有一个记录,角色记录中包含用户的用户 ID。对于大多数应用程序,我建议不要这样做,因为现在您有两个表代表一个事实:特定用户具有什么角色。因此,每次都需要在两个地方进行删除或更新。并非不可能,但需要更多的警惕和测试来确保您的应用程序不会得到错误的数据。这种方法的另一个缺点是您需要两次查询来获取信息,这可能比表扫描更昂贵,这取决于记录的数量。

对这个特定用例有意义的另一个选项是使用 SimpleDb。它具有更好的查询能力(默认情况下所有属性都被索引),并且在这种情况下,将角色作为多值属性的单表将是比 DynamoDB 更好的解决方案。

希望这可以帮助!

于 2012-02-27T17:38:43.230 回答
0

我们有类似的情况,我们只使用两个数据库,一个关系数据库和一个 NoSQL (Dynamo)。对于“用户”对象,与其他事物相关的所有内容,例如角色、项目、技能等,都在关系中,而关于用户的所有内容(属性等)都在 Dynamo 中。如果我们需要为用户添加新属性,那很好,因为 NoSQL 不关心这些属性。经验法则是,如果我们只需要那个对象页面上的某些东西(也就是说,我们不需要与其他对象关联),那么我们就放入 Dynamo。否则,它是相关的。

在您跨越一个很小的阈值之后,在 NoSQL DB 上使用表扫描并不是一个真正的选择(到那时,您仍然可以只使用内存数据库)。

于 2015-05-29T19:56:07.460 回答