用户特定的数据库记录

时间:2011-09-28 20:08:04

标签: sql database database-design sql-server-2008-r2

这更多是一个理论问题。无论如何, 假设我有一个数据库(50个表) 并且所有这些表中的数据应该专门针对一个用户。 我的意思是,通常我们为每个用户特定的表做外键。并使用以下内容检索数据:

select Column1,Col2,Col3 from Table where UserId=@UserId

这会严重影响查询。存储此类数据的另一种方式是什么?

2 个答案:

答案 0 :(得分:2)

可能还有其他方法,但我不会说它们更好。如果每个表中的每个记录都需要属于特定用户,那么您需要一种方法来定义它。

减少UserId列数量的一种可能方法是,如果您有子表,并且您只是假设父表定义了所有权,并且暗示它的子记录属于该用户。

示例:

CarMake:
MakeId
MakeName
UserId

CarModel:
ModelId
MakeId
ModelName

请注意,CarModel没有UserId列,但您可以假设它继承了父CarMake记录的相同UserId。如果你不能假设孩子应该总是继承父UserId,那么你原来的方法是最好的。

答案 1 :(得分:2)

你所指的是一个名字。它被称为multi-tenant。该链接提供了有关多租户结构的一些一般信息。

这完全取决于您的RDBMS。 Oracle提供了一个非常简单的工具。

WHERE User_ID = @User_ID 

成为策略,您可以应用于表格。您还创建了一个受保护的存储过程来更新@User_id,以确保在没有权限的情况下无法更改它。然后,对具有此类策略的表的每个查询都会在后台添加 where子句。它是自动的,没有办法避免它。