在我的项目中,我有一个数据库用于所有事情。我想将它分成两个数据库。具有查找值的静态表将存储在一个数据库中,而另一个数据库将包含动态数据的表。我的问题是如何在这两个数据库之间使用外键约束。有人能帮我并建议一种继续的方法吗?如果能给我提供一个示例就更好了。
我想到对表使用同义词,然后对同义词使用约束。但后来我知道同义词不能用于约束。
我需要维护两个数据库中表之间的关系,因为问题在于更新,对于新版本,我只想更新查找表,并且我想拆分我的数据库。
答案1
罗宾:
如果你想物理地分离易失性和静态数据,我建议你看看文件组功能。(向下滚动到该网页的中间即可获取相关信息。)
文件组允许您对表进行分组。这样,您就可以更轻松地控制它们的物理位置(例如,经常使用的数据可以放在快速 SSD 上,而其他数据可以放在较慢的硬盘上),控制读/写访问(文件组可以标记为只读)并改进备份/恢复方案(文件组可以备份或恢复)。由于所有表都位于同一个数据库中,无论文件组如何,声明性引用完整性(DRI,也称为“外键”)仍然有效。
如果您坚持使用不同的数据库,您将无法使用外键,而必须使用不同的方法。这意味着编写您自己的触发器(或可能是程序)。编写您自己的代码意味着额外的工作,代码中总是存在错误的可能性,触发器的性能通常比 DRI 更差。使用不同的数据库还有其他负面影响,最明显的是安全性(您需要管理两倍的内容)和时间点恢复(在两个数据库之间获得一致性比在一个数据库之间更难)。这些事情今天可能看起来并不重要,但:
- 现在把事情正确地做比以后修复事情要容易得多。
- 最好养成良好的习惯。
答案2
我认为你很无知,根本不知道自己想要什么。
瞧,sql服务器的大小是一个问题——要么在express中达到10gb的硬限制,要么在“真实”服务器上达到——不知道,可能是10000gb左右。
在大多数情况下,您的假设都是错误的 - 您什么也做不了,只能增加复杂性(外键不起作用,必须用触发器替换它们)。如果这是两个数据库,那么您什么也做不了,如果这是两台服务器,您就会增加延迟和大量其他问题。
首先,我假设您在此处提出的要求无效。您认为为什么需要这样做?
我家里有一个近1000GB的数据库,大小没有问题。