针对每个用户的特定目录混合的一般目录的可扩展数据库设计?

时间:2013-01-24 11:01:21

标签: database design-patterns database-design ruby-on-rails-3.2 scalability

我希望有一个最初将用于所有用户的威胁的一般目录。该目录有大约100个威胁。这些威胁与其他模型有关,例如AssetType。一个威胁会影响多个asset_types,一个asset_type会受到多个威胁的影响。

我的问题是我希望用户修改目录中的威胁,删除威胁并添加威胁,但目录的修改只需要他,而不是其他用户。与asset_types和关系相同。我希望每个用户都能够修改关系,但不能修改所有用户。

我的方式是我可以将CatalogThreat和CatalogAssetType以及CatalogThreatsAssetTypes作为常规目录,当创建新用户时,我会将每个catalog_threat复制到名为threat的表中,其中每个威胁都与用户相关。但是这种方式我认为我会有很多的两面性,因为我认为用户将很少修改目录。

你还有其他选择吗?这是一个很好的数据库设计吗?我应该知道的任何设计模式?

1 个答案:

答案 0 :(得分:1)

复制所有内容的唯一真正替代方法是为主目录建模更改列表。因此,如果用户从目录中删除了某些内容,则会将其存储在一条记录中,该记录指示“就像主目录一样,除了Fred已删除威胁3”。如果他们插入新的关系,您需要存储它。

查询此模型将非常困难,因为您需要选择目录记录,其中不存在当前用户与当前用户的任何插入联合的删除。根据您的数据库,您可以将其包装在视图中。