2009-07-11 47 views
8

我与企业应用工作,并拿起了DB设计的一些技巧提示企业级数据库设计

  1. 所有表应具有以下字段有助于审计线索 - LastChangedByLastChangedLastChangedPage
  2. 所有具有动态SQL的存储过程都应该有@bDebug参数。默认情况下,它被设置为0.如果设置为1,则打印出动态SQL语句,这对调试非常有帮助。
  3. 对于CRUD SP,有办法部分更新表格。如果你的表有10个字段,并且在其中一个SP中,你只关心只更新5个字段,有一个抽象层来做到这一点。

任何其他有用的提示,你可以想到的?

编辑:谢谢你的所有答案。我仍然在寻找一个可以提供DB设计技巧/技巧/策略链接的答案。

+1

伟大的问题。 – JoshJordan 2009-07-11 16:45:26

回答

0

在我看来一个需要CreatedBy创建领域。

+0

@rafek - 在我们的应用程序中,我们将CreatedBy作为LastChangedBy存储,并且与创建的字段相同。 – Nick 2009-07-11 16:49:40

+0

然后,在该记录更新后,您没有关于它的原始创建者的信息。 – rafek 2009-07-12 04:09:34

4

对于#1:迁移到SQL Server 2008,只需打开Change Data Capture。如果您确实需要保持详细的审计线索,则仅凭此功能就能证明成本。

对于#2:任何具有动态sql的存储过程应该自动放在双重秘密缓刑(即:允许,但必须经过多个级别的代码审查,以确保没有更好的方式来做到这一点) 。

1

当谈到网络的力量时,最好不要删除任何东西。因此,有一个deletedOn日期,您可以排除那些已从您的搜索中“删除”的对象。这也有助于疯狂的客户不小心删除了他们的账户。显然这不应该用在每个领域。

+0

如果忽略数据库上的这一行字段,可以使许多事情更容易。我发现大多数解决方案都需要“不再使用”样式标志,以便旧数据可以被搜索,但是新条目不能重复使用旧ID等。 – Spence 2009-07-11 17:45:33

+0

由于性能方面的原因,在大型平台上,您可能需要甚至进一步通过实施表分区来分割您的生活和删除数据。您也可以考虑实施档案数据库。 – 2009-07-12 09:05:14

1

一对夫妇的想法有非常大的数据库(VLDB)工作时,立即映入脑海:

你应该实现表分区?

拥有数百万条记录的大型数据库表可能受益于表分区。

  • 此SQL Server 功能的可用性仅限于使用 企业版。
  • 适用性取决于您的平台硬件和 分区键在表数据中的可用性。

什么是我最常访问的表格?

考虑按文件组进行分隔,即将Customer表放置在另一个Filegroup和Transaction表上。这允许SQL Server为文件访问创建多个线程,从而创建顺序I/O的可能性。

然后考虑底层物理磁盘结构,即每个文件组的单独LUN。

设计一个灵活的索引策略

你将毫无疑问心中已经有了一个索引策略然而,对于VLDB这个平台应该经常检讨。随着数据量的增加和数据分布的变化,数据访问查询的执行计划可能会发生变化。您应该计划定期检查您的索引策略。

1

LastChangedBy等字段是相当无用的。如果您确实需要审计跟踪,则需要单独的审计表来详细说明更改并维护审计历史记录。如果你不需要审计追踪,LastChangedBy等字段只是增加工作,没有商业价值。

0

日期应以Utc格式存储并在客户端转换为本地时间。