Rad*_*scu 20 database sql-server database-design sql-server-2005
我对您加入来自不同数据库的两个或多个表的陷阱感兴趣.我试着举个例子.
假设表Table1
位于DatabaseA
数据库中并Table2
位于DatabaseB
.假设我有一个视图,DatabaseA
从中抽出一些数据Table1
,以及其他一些表格DatabaseA
.
这个视图用于将数据推送到另一个数据库,让我们打电话给这个,这是一个非常想象的DatabaseC
.
如果我需要一些数据Table2
,我的直觉是直接加入Table2
这个视图,有点像这样table1 inner join DatabaseB..table2 on [some columns]
这样做非常简单快捷,但我脑子里有一种唠叨的声音,一直告诉我不要这样做.我担心的是无法追踪所有对象Table2
,所以如果我在那里改变了一些东西,我必须非常小心并记住我使用这张桌子的所有地方.所以,有点像打破这个视图(和两个数据库)的SRP,因为这个视图可以从两个不同的动作改变(在两个不同的数据库上执行:更改Table1
或更改Table2
)
我对你的意见感兴趣.这是一个好主意还是坏主意?这种方法会出现什么问题(表现明智,维护明智等等),如果你有真实的世界经验,这种方法要么是一个大错误,要么是为你节省生命.
PS:我在google和SO上搜索了这个主题,但找不到与此相关的任何内容.我很乐意接受来自SO用户的减号,重复问题和其他"谴责",以便对这个问题有不同的看法.
PPS:我正在使用SQL Server 2005.
谢谢你,希望我明白自己:)
HLG*_*GEM 28
如果它们位于同一台服务器上,那么从单独的数据库中提取就没有问题.事实上,你可能想要将它们分开是有充分理由的.例如,如果您具有从文件导入的事务表和查找表的组合.事务数据需要完全恢复并且频繁的事务日志备份才能够正确恢复,查找数据不能并且可以从简单恢复模式下的数据库中受益.
我们的应用程序使用了许多不同的数据库,并且我们一直在查询中交叉数据库.只要索引正确完成,就没有明显的性能差异.最大的潜在问题是数据完整性,因为您无法跨数据库设置外键.如果需要,可以在触发器中处理.
现在,当数据库位于不同的服务器上时,可能会出现性能问题,并且获取数据会更复杂.
JNK*_*JNK 11
与SQL中的其他内容一样,它取决于.
在我的工作中,我们做了很多.我们有非常大的数据集,标题和详细级别记录的单独数据库,以及我们根据其他数据建立的报表或表格的其他数据库等.
加入DB并没有真正的性能问题,在某些情况下,根据您的硬件设置,它可能会更快.如果DatabaseA和DatabaseB位于具有不同控制器的单独物理驱动器上,则运行加入这些控制器的查询的速度可能比它们位于同一卷上的同一数据库中的速度更快.
维护可能是一个问题,但不会超过任何其他数据库/表.它不像你有相同表的不同版本,你只是在不同的数据库中有这些表.
唯一的主要缺点是SQL Server在显示数据库内部依赖性方面表现不佳,因此您需要自己跟踪这些依赖关系.有一些脚本和第三方实用程序,我听说SQL Server Denali将为此添加额外的支持,但我不确定这是否准确.
你唠叨的声音可能是正确的.
最重要的问题是如何强制执行声明性引用完整性,因为您无法在数据库之间创建外键,因此迟早您将不得不应对不一致或不匹配或不完整的数据.
但如果你不关心那个,我没有看到问题:-)