这更多是一个理论问题。无论如何, 假设我有一个数据库(50个表) 并且所有这些表中的数据应该专门针对一个用户。 我的意思是,通常我们为每个用户特定的表做外键。并使用以下内容检索数据:
select Column1,Col2,Col3 from Table where UserId=@UserId
这会严重影响查询。存储此类数据的另一种方式是什么?
答案 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子句。它是自动的,没有办法避免它。