多个数据库 vs 单个数据库

7
我正在查看一个现有的网站,他们正在使用单独的数据库。数据库似乎是按以下方式设置的:
- 通用类别(user_type,language,age等) - 会员数据(注册信息和登录) - 网站配置
个人而言,我会将所有内容放入一个数据库中。对我来说,这比几乎总是需要在每个表前面放置数据库名称更容易。
从安全角度来看,确保人们不会意外访问错误的数据,但在此网站上,将有管理员(站点用户的约10%)需要访问所有数据库,进行跨数据库搜索。
为什么要使用单独的数据库? (该网站使用PHP和MySQL。)
编辑:数据库名称为:
- sitename(实际网站名称)(通用类型) - member(会员数据) - siteconfig(网站配置)

1
是的,这很底层疯狂。对程序员来说意味着更多的工作量,但回报也是更多的工作量。 - MusiGenesis
5个回答

11

纯属对创建者想法的猜测:

也许是数据的不同易变性,因此可以为不同的物理数据库制定不同的备份/复制策略?

也许是一个想法,即“一般类型”可以在多个应用程序之间共享,但例如“站点配置”将仅针对一个应用程序特定?

也许是一种想法,不同的数据库可以放置在具有不同性能特征的不同硬件上,例如它们的RAID配置。经常读取但不更新的数据与经常更新的数据。

再次强调,这只是纯粹的猜测......

@Darryl-我的回答更像考古而不是技术。我并不是说我相信其中任何一个。我只是试图进入祖先的思维方式...


1

仅仅是猜测:也许这是一种架构决策,以支持关注点分离。


不熟悉这个术语...你能解释一下关注点吗? - Darryl Hein
请纠正我,但通常意味着您将设计和工作分开,并将其移交给不同的开发人员,以找到问题的最佳解决方案,而不是一般解决方案。 - Robert Gould

1
我想不出为什么要为你列出的信息创建多个数据库,特别是如果这些数据需要交叉链接。听起来更像是有人不知道如何使用权限,所以他们没有授予对表的访问权限,而是创建了新的数据库。只是一个观点,但将所有内容缩减到一个数据库可能会有所改善。

1
令人惊讶的是无知能够产生什么。我正在使用一个没有任何主键的数据库,这种情况是由于最初的开发人员不知道如何创建视图所导致的。 - MusiGenesis
@MusiGenesis 我错过了这个。 :( 没有主键和创建视图之间的关联是什么? - Kulingar

0

在 Android 中,我们尤其面临这样的问题(供参考)

在 Android 的多模块应用中使用数据库

当我们将一个应用进行模块化时,我们会遇到关于数据库存放位置的问题。虽然没有特定的正确方法来解决这个问题,但其中一种实现方式是为整个应用使用单个公共数据库。另一种方式是为核心通用功能创建一个数据库,然后为功能模块分别创建不同的数据库。

单个数据库的优缺点

优点:

  1. 维护数据库连接容易,因为我们只需要打开一个数据库连接。
  2. 共享表格容易。

缺点:

  1. 模块之间没有隔离,因此我们需要重命名这些表格以避免跨模块冲突。
  2. 没有特定的实体在共享域中。我们需要将所有实体和 DAO 放入与应用一起发布的核心模块中。

一个数据库/模块的优缺点

优点:

  1. 模块之间完全隔离。

缺点:

  1. 数据库连接维护。如果我们想要跨模块编写查询,那么会变得复杂。

-1
如果有一个很好的理由将数据库分成许多像这样的小数据库,那么这些数据库的名称可能会像“hadronsupercolliderrawdata”和“googlebackup_2008”一样。而“generaltypes”和“memberdata”这样的名称则表明它们只是被愚蠢所压倒了。

2
你是否有理由根据某人的应用程序设计来侮辱他们的智商?也许他们在项目/公司开始时是新手程序员。因为糟糕的设计而说某人“愚蠢”往往会让你看起来像那样。 - JM4
2
@JM4:因为我称别人愚蠢而被说成自己也很愚蠢,这种说法有点傻,如果你不介意的话。如果我因为称别人愚蠢而被说成自己是个混蛋,那就完全准确,也不傻。至于你评论的核心内容,当然他们在项目开始时是新手程序员——大多数糟糕的代码都来自此。 - MusiGenesis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接