2009-12-10 42 views
0

我们正在考虑创建新的模式,并创建其自己的3个表格,这些表格将为个别客户实时创建。在特定模式环境下运行SQL查询

要在程序运行这些表一个特定的查询,我们应该有这样的事情。

declare @sName nvarchar(200); 
select @sName =Schema_Name from schema where Schema_Id = passed_id_from_code 
ALTER USER UserName WITH DEFAULT_SCHEMA = @sName 

-- Run the statements here -- 
... 



-- After finishing executing statements 
ALTER USER UserName WITH DEFAULT_SCHEMA = db; 

在这种情况下,来自各种架构的并发客户可以更新他们自己的架构表,否则会发生冲突。

您的建议受到欢迎。 阿尼尔

回答

0

大多数SQL数据库有每个表作为创建该数据库中的唯一实体。这意味着每个表都可以单独修改和更改,而与其他表无关。 CUSTOMERA.TABLE_ONE是数据库中与CUSTOMERB.TABLE_ONE不同的对象。它们共享相同的名称,但它们不是具有可能不同布局的相同对象(因为它们具有不同的模式)。

因此,除非对RDBMS有一些限制,否则可以这样做。现在每个用户有不同的模式可能不太好。如果您正在开发同一个应用程序来处理多个客户,那么您必须确保它适用于所有架构和所有客户。在可能不同的模式版本中。

如果你要一个多租户架构,它可能是明智的使用某种延伸到表。因此,您有一个DB.TABLE_ONE,其中包含一个CUSTOMER_DATA列,您可以将数据以灵活的格式(例如JSON或XML)放入。有些RDBMS认为,作为本地特性(我相信DB2是其中之一)。

希望这会有所帮助。