数据库服务器上的强数据库名称

时间:2009-09-03 21:03:55

标签: sql-server database database-design naming

我们有一个包含许多数据库的SQL服务器。我们的客户拥有多个版本的类似应用和多个应用,适用于单个客户。几乎所有数据库都与特定网站相关联。

如何使用数据库名称保持井井有条?当然没有单一的答案,但你有一个适合你的数据库命名策略吗?

我们正在考虑:

客户+产品+开发阶段(生产,分期等)

但是当客户运行三个版本的产品时,这会变得很尴尬。

7 个答案:

答案 0 :(得分:8)

创建一个Developmestuction,在同一个数据库服务器上有多个相同数据库(Dev,Production)的实例,这只是一个问题。如果无法获得第二台服务器(物理或虚拟),则应考虑创建单独的SQL Server实例。

您的数据库名称应反映您在内部引用应用程序的方式。你写道:

  

我们的客户拥有类似应用的多个版本和单个客户的多个应用

目前尚不清楚你的意思。选择一个“基础”应用程序,然后为不同的客户端自定义应用程序?您是否为不同客户创建完全不同的应用程序?它是两者的混合物吗?

我的假设是,您首先要开发一次性应用程序,如果其他客户喜欢它,请将其用作未来客户的基本应用程序。基于此,通过名称+客户引用您的应用程序并相应地命名您的数据库是有意义的。

  • SalesManager_Wilco
  • SalesManager_AbcInc
  • SalesManager_Internal
  • TimesheetKeeper_Internal
  • ExpenseTracker_Wilco
  • HelpBuilder_Wilco

答案 1 :(得分:6)

我们的命名策略通常基于表示数据库的不同“维度”的“三个字母缩写词”(TLA's)的串联,以下划线分隔。此规则适用于站点,应用程序,客户端等。

例如,当我的应用首字母缩略词为ABC,而我们的阿联酋办事处是ABC数据库的嫌疑人时,此数据库名称将为ABC_UAE(使用当时的官方/ ISO TLA这个国家当然是个不错的选择)。

为客户提供TLA标识符后,您可以使用它来构建数据库名称:

  • ABC_ACM:适用于Acme公司的主要/中央ABC数据库
  • ABC_ACM_CAN:其订户位于加拿大

现在,如果您维护不同的数据库版本,则可以选择:

  • ABC_012_ACM如果为多个客户维护版本1.2

  • ABC_ACM_012如果Acme有其特定的1.2版本

如果这些数据库有子订阅者,那么ABC_ACM_012_CAN的含义就非常明显了。我建议你使用标准的3位数字编号。它让事情变得更加容易!

在讨论开发数据库时,此规则会遇到一些异常。例如,我的开发人员版本的ABC_ACM数据库将为ABC_ACM_pgrondier,如果开发由客户端维护,或ABC_012_pgrondier如果开发是按版本维护的。事实上,当你遇到个人嫌疑人时,让数据库名称的最后一个“维度”没有实现TLA规则也很常见:

  • ABC_ACM_012_usernameABC_ACM_012

  • 的订阅者
  • ABC_ACM_012_CAN_usernameABC_ACM_012_CAN

  • 的订阅者

答案 2 :(得分:3)

我希望尽可能在我的数据库命名方案中包含网站名称:

client_sitename_app_version

如果一个客户端在同一个站点上运行相同版本的多个应用程序,每个应用程序都需要自己的数据库......这看起来有点奇怪。根据用例,您需要另外一个区别因素。在最后附加实例编号或使用参考。

答案 3 :(得分:2)

回应之前的帖子并抛出一些评论:

绝对是公司/客户和应用程序。首先取决于哪个更重要 - 不是对客户,而是对支持软件的人。

我完全同意只有生产系统应该在生产服务器上。开发,测试,质量保证,升级,EAP,无论如何,通过自己的盒子,SQL实例或VMWare实例,它们都是最好的服务。 (“Developmestuction”。喜欢它。)

我质疑在数据库名称中添加版本。版本X的数据库是否可以更新为版本X + 1或X.1?如果是这样,您是否必须挖掘并重命名所有连接字符串和引用数据库名称的其他位?版本控制数据是我将(并且确实)存储在每个数据库中的信息。如果升级意味着将旧数据库中的数据迁移到新构建的数据库,我想您可以将该版本放在名称中。如果你必须主动支持给定数据库“type”的多个版本,并且它对支持系统的人员在数据库名称中明确说明了这些信息很有用,那么就去做吧(尽管如此,请注意更新/重命名问题)。

答案 4 :(得分:2)

我们使用{product} {version} {开发|测试} _ [可选功能说明,所有者,日期]

它很长,但确实意味着每个数据库都可以被跟踪,每个数据库都有一个可识别的所有者。因此,版本4.2的主要产品数据库是,Product42Development ...并且具有关联的对等测试数据库Product42Test

对等测试数据库与主测试数据库(位于不同的服务器上并且完全由测试团队使用)分开:这是开发人员在将其修复到主树之前进行修复的地方,通过它进行测试其他开发人员(因此也是同行测试),但要将其保持在积极的开发阶段(不断变化和不稳定)。

如果需要数据库的一个分支,因为某人正在进行非常具有破坏性的开发,那么最终将包括功能名称,功能所有者和创建日期。类似于:Product42Development_NewFeatureName_OwnerName_20090812 ...这确保了DBA不仅可以跟踪存在哪些数据库,而且(更重要的是)所有其他开发人员也可以这样做,因此他们不会对数据库进行错误处理了解数据库的用途。

答案 5 :(得分:1)

我们正在使用容器隔离来运行不同的实例/倍数版本的数据库(postgres和mysql),但命名方案问题仍然是相同的。我们按照下一个:

客户名称+产品ID +任务类型(产品,分期,测试,会计等)

例如:nuxil_erp_test,nuxil_erp_prod,nuxil_erp_accountingTraining。

但是,我们可能会放弃这个命名方案,因为客户可以创建新的数据库,并且他们都有自己的命名数据库的想法。

答案 6 :(得分:0)

去年与我合作的一家大公司部署了我的雇主出售的工具集,我们遵循了他们的区域命名惯例:

美国

  • <appname>{p|d}其中p代表生产,d代表发展

英国+香港

  • <datacenter><appname>{p|d}

这对他们有用。就个人而言,我也围绕appname和用法命名我的数据库实例。