有没有人知道可用的白皮书讨论使用不同模式中存在的同名表格?
我正在SQL Server上实现,但我想这个理论可以应用于任何RDBMS。
更具体一点,比如我有一个服务于两个应用程序的数据库,应用程序之间存在一些资源交叉,但有些数据集存储在不同的模式中。
例如
App1.tblSomeData
App2.tblSomeData
两个表使用相同名称的优点/缺点是什么?另一种选择是使用不同的名称:
App1.tblSomeDataForApp1
App2.tblSomeDataForApp2
这可以确保所有表名都是唯一的,但这有利有弊吗?
答案 0 :(得分:1)
我不知道有关这个问题的任何白皮书,可能是因为它不够复杂,不能保证整篇白皮书。
如果您在每次使用表名时完全限定表名(report.Customers
或web.Customers
而非Customers
),那么即使您这样做,也不应该有任何问题在多个架构中具有相同的表名称。你应该这样做,因为它的性能优化(SQL不必解决模糊的名称)。
我强烈建议不依赖用户的“默认架构”来确定正在选择哪个表。当具有不同默认模式的用户调用相同的代码时,这只会导致麻烦。
答案 1 :(得分:1)
RDMS将接受查询中其他表和模式的“绝对”引用:
SELECT databasename.tablename.fieldname
FROM databasename.tablename
WHERE otherdatabase.othertable = ...
没有任何投诉。我不知道为什么有人会想写一篇关于这个问题的白皮书,因为它相当于写了一篇关于不同城市的某些人如何拥有相同名字的论文(“哇,你知道吗?”约翰史密斯在纽约 AND 在洛杉矶?!?!?“)。
答案 2 :(得分:0)
如果要使用多个模式,则必须使用schema.objectname
限定对象名称。如果不这样做,SQL将假定您调用的对象位于dbo
模式中。如果它没有找到它,它将会出错。如果dbo
和另一个模式中都出现了具有相同名称的对象,则如果您没有完全限定对象,则最终可能会选择错误的对象。