gpt4 book ai didi

mysql - 不同数据库连接中的外键

转载 作者:行者123 更新时间:2023-11-29 06:48:33 30 4
gpt4 key购买 nike

在构建我的应用程序时,我遇到了一个问题。我有一些包含信息的数据库表,我想为不同的应用程序重用。主要用于身份验证和用户权限。

这就是为什么我决定将数据库分成两部分,一个用于用户数据(其他应用程序需要的数据),另一个用于与应用程序相关的数据(我仅需要此数据)。

在某些情况下,我需要在另一个数据库上引用一个数据库中的外键。当数据库处于同一连接时,我这样做没有问题。我是这样做的:

CREATE TABLE `database1`.`table1` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`foreign_key` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `table1_foreign_key_foreign` (`foreign_key`),
CONSTRAINT `table1_foreign_key_foreign` FOREIGN KEY (`foreign_key`) REFERENCES `database2`.`table2` (`id`)
);

现在这是我的问题。我正在了解 Docker,我想为每个数据库创建一个容器。如果我的理解是正确的,每个容器充当不同的连接。

是否可以在不同的数据库连接上引用外键?

是否有另一种方法可以从一个 Docker 容器引用另一个容器的外键?

如有任何建议或意见,我们将不胜感激。

最佳答案

出于多种原因,跨数据库边界使用外键是一个坏主意。

  1. 横向扩展:您将数据库绑定(bind)到同一个实例。将数据库移动到新实例变得更加复杂,并且您绝对不希望最终在链接服务器上运行 FK 约束。请不。不要。
  2. 灾难恢复:您的灾难恢复流程存在重大风险。您的备份是否在完全相同的时间点捕获数据?否则,存在恢复后相关数据不匹配的风险。即使是几秒钟的差异也会使关系的完整性失效。
  3. 不同的子系统:每个数据库都需要资源。有些是显式的,有些是共享的,但实例中运行的每个数据库都会产生开销。
  4. 安全性:每个数据库都有自己的安全实现。不同的登录和访问权限。如果 DATA 数据库中的用户需要根据 USER 数据库查找值,您需要管理这两个数据库的权限。按数据库隔离数据并不能解决或增强安全性,它只会让事情变得更加复杂。管理敏感数据安全性的开销不会改变,您仍然需要根据数据(而不是数据的位置)检查和管理用户和权限。您应该能够在单个数据库中实现完全相同的安全控制。

关于mysql - 不同数据库连接中的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48443679/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com