如何根据数据库拆分应用程序的数据?很多软件都会有像Auth_Users,Auth_Whatever,Auth_Something,然后是Admin_Something,Admin_Whatever等的表。基本上这些表都存在于一个数据库中,但它们是按命名约定组织的。另一种选择是将一些数据分成几个数据库。做其中一个的优点和缺点是什么?
答案 0 :(得分:1)
当您按照建议拆分数据时,您必须跳过箍来获取数据,并能够在查询或应用程序中使用它。您还增加了维护问题,例如权限,同步,备份,实施业务规则等。您可能遇到这种情况的一个实例是,当有多个现成的应用程序已在使用中并且您需要关联所有这些信息。
我确信还有其他一些情况,在一个地方把所有东西放在一起是根本不可行的。在这些情况下,为了通过使用视图,存储过程,函数等链接到多个其他源中的数据来创建新数据库,可以帮助使数据在不是时显示为集成。但这将是更多的工作,并且您将无法对完整性功能进行大量控制,从而导致与其他数据源的脆弱的链接方案。 “我们链接名字和姓氏,但我们得到各种误报,因为DataEntry Dude胖了十几次,所以我们有多个错误的副本似乎有点匹配”。你不再需要那种场景,而不是你必须拥有的场景。
在我看来,一个好的经验法则是尝试尽可能地在一个数据库中保留相关数据(或者您认为可能在某些时候相关的数据),并花费大量时间考虑适当的命名方案,关系和键/索引。例外情况可能是非常通用的数据,例如gov't从人口普查结果中提供的邮政编码数据。像这样的数据最终可能会用在你拥有的各种其他数据库中,但它们真的并不与它们相关。在这种情况下,除非你足够幸运,只有一个数据库,我会创建另一个数据库,将所有奇怪的数据放入,然后从需要信息的其他数据库链接到它。然而,这并不总是理想的,因此有些人将数据库设计描述为艺术和科学一样。
总有曲线球需要处理,但只是保持你关心你正在处理的数据的心态,这意味着总是考虑如何保持完整性信息(即业务规则,关系,保持重复等)。
答案 1 :(得分:0)
您还没有考虑过第三个选项:Users-Groups-Roles。在单个凭据关系数据库或LDAP中创建这三种关系。
将凭据分配给特定角色;赋予集团一个角色;将用户添加到组。
我不会将这些分成不同的数据库。在我看来,太过分散使得维护变得更加困难。