我们有一个SQL服务器,其中包含许多数据库。我们的客户拥有多个版本的类似应用程序和多个应用程序供单个客户使用。几乎所有的数据库都绑定到特定的网站。数据库服务器上的强大数据库名称
你如何保持与你的数据库名称组织?当然,没有单一的答案,但你有一个数据库命名策略是否适合你?
我们正在考虑:
客户+产品+开发阶段(生产,分期等)
但是,当一个客户运行产品的三个版本变得很尴尬。
我们有一个SQL服务器,其中包含许多数据库。我们的客户拥有多个版本的类似应用程序和多个应用程序供单个客户使用。几乎所有的数据库都绑定到特定的网站。数据库服务器上的强大数据库名称
你如何保持与你的数据库名称组织?当然,没有单一的答案,但你有一个数据库命名策略是否适合你?
我们正在考虑:
客户+产品+开发阶段(生产,分期等)
但是,当一个客户运行产品的三个版本变得很尴尬。
我们的命名策略通常是基于串联 '三个字母缩略词'(TLA's)代表数据库的不同“维度”,由下划线分隔。此规则适用于网站,应用程序,客户等
例如,当我的应用程序的首字母缩写为ABC
,我们的联合酋长国办公室是一个会员键到ABC数据库,该数据库名届时将ABC_UAE
(使用那么官方/国家的ISO TLA当然是一个不错的选择)。
一旦你给你的客户TLA标识符,你可以用它来建立你的数据库名称:
ABC_ACM
:主/中央ABC数据库ACME公司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规则数据库名的最后一个“尺寸”是也相当常见,当你来到个人suscribers:
ABC_ACM_012_username
是subcriber到ABC_ACM_012
ABC_ACM_012_CAN_username
被subcriber到ABC_ACM_012_CAN
我想包括我的分贝的命名方案的站点名称时可能:
client_sitename_app_version
如果一个客户端在同一个网站,每个人都需要自己的数据库......这运行同一版本的多个应用程序似乎有点奇怪。根据使用情况,您需要另一个区分因素。在最后附加实例编号或用法参考。
这些网站通常是大公司。有时,不止一个部门需要我们的软件。也许可以把它看作是内联网版本和互联网版本。 – JoshBaltzell 2009-09-04 03:39:34
创建Developmestuction,你必须在同一数据库服务器上的同一个数据库(开发,生产)的多个实例是自找麻烦。如果您无法获得第二台服务器(物理或虚拟),则应考虑创建单独的SQL Server实例。
您的数据库名称应反映您如何内部引用应用程序。您写道:
我们的客户有类似的应用程序的多个版本和多个应用程序的单一客户
目前尚不清楚你的意思。做一个“基础”应用程序,然后为不同的客户端定制应用程序?你为不同的客户创建完全不同的应用程序吗?它是两者的混合物吗?
我的假设是,你开发一个一次性的应用程序并开始,如果另一个客户喜欢它,用它作为为未来的客户基础应用。基于此,通过名称+客户引用您的应用程序是有意义的,并相应地命名您的数据库。
关于同一台服务器上的多个实例,我只部分同意。我认为在生产服务器上有一个临时数据库是很有意义的。这就是说,您正在尽可能接近生产设置地测试新功能。很明显,开发是在另一台服务器上。 你完全正确的基础应用程序。我们制作一些应用程序,并通过定制将其提供给多个客户。 – JoshBaltzell 2009-09-04 03:35:23
不,它使您在生产服务器上拥有任何东西,但生产应用程序/数据库的能力非常有限。这不是你能做的最糟糕的事情(也不是太大的交易),但这当然不是最佳做法。无论你多么小心,通过测试来污染生产数据的风险太大。如果您想针对prod数据进行测试,请将备份下载到测试服务器。或者,如果必须,请在同一台服务器上使用不同的SQL Server实例。 – 2009-09-04 14:38:39
......更不用说,在生产服务器上执行的非生产性工作将减少CPU的时间,内存,磁盘I/O数量,甚至可用于现有生产软件的可用网络带宽。 – 2009-09-11 13:49:48
呼应在一些评论之前的帖子和折腾:
当然,公司/客户和应用程序。首先取决于哪个更重要 - 不是对客户,而是对支持软件的人。
我完全同意只有生产系统应在生产服务器上。开发,测试,质量保证,分期,EAP等等,他们都可以通过自己的盒子,SQL实例或VMWare实例获得最佳服务。 (“Developmestuction”。喜欢它。)
我向数据库名称添加版本的问题。版本X的数据库是否可以更新为版本X + 1或X.1?如果是这样,你是否需要挖掘并重命名所有连接字符串和引用数据库名称的其他位?版本控制数据是我会(并确实)存储在每个数据库中的信息。如果升级意味着将旧数据库中的数据迁移到新构建的数据库,我想你可以将该版本放在名称中。如果您必须主动支持给定数据库的多个版本“类型”,并且支持系统的人员在数据库名称中明确指出该信息时非常有用,然后继续使用(尽管如此,请注意更新/重命名问题)。
在大公司我去年工作部署工具集,我的雇主出售之一,我们跟着他们的区域命名约定:
美国
<appname>{p|d}
其中p为生产和d发展UK + HK
<datacenter><appname>{p|d}
这对他们有效。就我个人而言,我也将我的数据库实例命名为应用程序名称和用法。
我们使用容器隔离来运行数据库的不同实例/多个版本(postgres和mysql),但命名方案问题仍然相同。我们按照下一个:
客户名称+产品ID +任务实物(产品,分期,测试,会计等)
例如:nuxil_erp_test,nuxil_erp_prod,nuxil_erp_accountingTraining。然而,我们可能会放弃这种命名方案,因为客户有能力创建新的数据库,并且他们都有自己的命名数据库的想法。
我们使用{产品} {版本} {开发|测试} _ [可选功能描述,所有者,日期]
其漫长的,但并不意味着每个数据库,可以跟踪每个数据库都有一个identifibale所有者。因此,4.2版的主要产品数据库为Product42Development
......并且具有关联的对等测试数据库Product42Test
。
对等测试数据库与主测试数据库(位于不同的服务器上,纯粹由测试团队使用)分开:开发人员将其修补程序放入主树之前进行修改,让测试数据库进行测试由其他开发者(因此是同行测试),但保持它不在积极的发展(这是不断变化和不稳定)。
如果因为某人正在进行非常具有破坏性的开发而需要数据库的一个分支,它最终将包括功能名称,功能所有者和创建日期。例如:Product42Development_NewFeatureName_OwnerName_20090812
...这确保了DBA不仅可以跟踪存在哪些数据库,而且(更重要的是)所有其他开发人员都可以跟踪数据库,因此他们不会对数据库感到不安。 DB在那里。
很好的建议。提出“你的店有多大”的问题?对于大公司,你需要这样的东西来保持理智[*和*你有服务器/ VMInstances做到这一点];对于小商店来说,这种控制和细节会扼杀你。 – 2009-09-14 14:16:34
在接受答案之前,我想再多输入一次。这几乎是所有开发人员和IT人员处理的问题,所以肯定会有更多意见。赏金补充说。 – JoshBaltzell 2009-09-08 13:09:00
这是一个需要回答的主观问题,每个人都有很好的观点,但我认为@PhilippeGrondier给了我们一个最适合我们的建议。非常感谢大家! – JoshBaltzell 2009-09-14 19:08:42
很高兴知道它有帮助 – 2009-09-15 06:43:46