2011-09-28 59 views
2

这是更多的理论问题。无论如何, 假设我有一个数据库(50表) 而所有这些表中的数据应专门针对一个用户。 我的意思是,通常我们为每个用户特定的表执行外键。并使用类似的检索数据:用户特定的数据库记录

select Column1,Col2,Col3 from Table where [email protected] 

这种混乱的查询显着。存储这种数据的另一种方式是什么?

+0

您可以制作视图来清除查询。例如,如果您有'customers','customers_addresses','customer_phones',...您可以创建'customers_full'。这将使关于客户的任何查询更清晰,而不是N个连接,您将拥有1个视图。 – DavidEG

回答

2

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

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

WHERE User_ID = @User_ID 

成为政策您可以申请于表。您还可以创建受保护的存储过程来更新@User_id,以确保无需授权即可更改它。然后,对具有这种策略的表的每个查询都会在后台添加where子句。它是自动的,无法避免它。

+0

在Oracle中,它被称为虚拟专用数据库或行级安全。取决于你与谁交谈的年龄。 –

2

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

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

例子:

CarMake: 
MakeId 
MakeName 
UserId 

CarModel: 
ModelId 
MakeId 
ModelName 

注意CarModel没有一个用户ID列,但你可以假设它继承了父CarMake记录的同一用户ID。如果你不能认为孩子应该总是继承父UserId,那么你的原始方法是最好的。

+0

+1无论如何,这是一个很好的建议。它使你有更低的机会陈旧的数据。 – corsiKa

相关问题