我们正在考虑创建具有自己的3个表的新模式,这些表将为个别客户即时创建。
要在过程中为这些表运行特定查询,我们是否应该这样。
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 :(得分:0)
大多数SQL数据库都将每个表创建为该数据库中的唯一实体。这意味着每个表都可以单独修改和更改,与其他表无关。 CUSTOMERA.TABLE_ONE是数据库中CUSTOMERB.TABLE_ONE的另一个对象。它们共享相同的名称,但它们不是具有可能不同布局的相同对象(因为它们具有不同的模式)。
因此除非对RDBMS有一些限制,否则你可以这样做。现在为每个用户设置不同的模式可能不太好。如果您开发相同的应用程序来处理多个客户,则必须确保它适用于所有架构和所有客户。在可能不同的模式版本中。
如果您打算使用多租户架构,那么对表使用某种扩展名可能更明智。所以你有一个DB.TABLE_ONE,有一个CUSTOMER_DATA列,你可以用一种熟悉且灵活的格式(比如JSON或XML)来放置数据。有些RDBMS认为它是本机特性(我相信DB2就是其中之一)。
希望这有帮助。