规范化并使用主键/外键 SQL Server 2008 R2

Normalize and use primary / foreign keys SQL Server 2008 R2

注意:我以前从未这样做过:

有哪些步骤或文档可以帮助规范化数据库中的 tables/views?目前,数据库中有几个 table 和视图不使用 primary/foreign 关键概念,并且在多个 table 中重复相同的信息。

我想清理它并稍微设置一个可以保持关系更新的过程。例如,如果一个人的邮政编码发生变化或记录被删除,那么它会自动更新其与其他 tables row/s.

的关系

注意:* 我的问题是规范化现有数据库 tables。 table 是实时的,那么我该如何处理标准化?我是否创建一个具有我想要的 table 结构的全新数据库,然后将数据移动到该数据库?数据移动后,我插入存储过程并导入?

这个问题有点笼统,所以我只解释一下概念。

视图 通常 用于 reporting/data 演示目的,因此我不会尝试将它们标准化。您的情况可能有所不同。

你还需要清楚主/外键的概念:

缺少在 table 上定义的实际约束(例如 PRIMARY KEYFOREIGN KEY)并不意味着 table 在列上没有逻辑关系。

数据维护可以在Triggers.

中实现

如果您确实遇到 tables 中无明显原因存在大量高度非规范化数据的情况,并且您想对其进行规范化,那么可以通过两种方式解决此问题:

  1. 完全重写 - 我会推荐小型/新应用程序
  2. "Gradual" 重构 - 大型/成熟的应用程序,其中底层数据关系复杂和/或可能未被完全理解。

在 "Gradual" 重构中也有几种方法:

2.a。您将 1 个旧 table 替换为新 table,同时将所有使用旧 table 的代码更改为使用新 table。对于大型系统,这可能会有问题,因为您可能根本不知道引用此 table 的所有位置。另一方面,它可能对 table 结构变化不显着 and/or 当依赖项数量较少时有用。

2.b。另一种方法是以您想要的形状/形式创建新的 table(s) (在同一数据库中)。当前的 tables 应替换为 Views 与 return 相同的数据(与旧的 tables 相同,但来自 "new" tables .这种方法消除/最小化了立即修改所有依赖项的需要。缺点是替换旧 table 的视图会变得相当复杂,特别是如果需要实现 View Instead Of Triggers。