规范化并使用主键/外键 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 KEY
、FOREIGN KEY
)并不意味着 table 在列上没有逻辑关系。
数据维护可以在Triggers
.
中实现
如果您确实遇到 tables 中无明显原因存在大量高度非规范化数据的情况,并且您想对其进行规范化,那么可以通过两种方式解决此问题:
- 完全重写 - 我会推荐小型/新应用程序
- "Gradual" 重构 - 大型/成熟的应用程序,其中底层数据关系复杂和/或可能未被完全理解。
在 "Gradual" 重构中也有几种方法:
2.a。您将 1 个旧 table 替换为新 table,同时将所有使用旧 table 的代码更改为使用新 table。对于大型系统,这可能会有问题,因为您可能根本不知道引用此 table 的所有位置。另一方面,它可能对 table 结构变化不显着 and/or 当依赖项数量较少时有用。
2.b。另一种方法是以您想要的形状/形式创建新的 table(s) (在同一数据库中)。当前的 tables 应替换为 View
s 与 return 相同的数据(与旧的 tables 相同,但来自 "new" tables .这种方法消除/最小化了立即修改所有依赖项的需要。缺点是替换旧 table 的视图会变得相当复杂,特别是如果需要实现 View Instead Of Trigger
s。
注意:我以前从未这样做过:
有哪些步骤或文档可以帮助规范化数据库中的 tables/views?目前,数据库中有几个 table 和视图不使用 primary/foreign 关键概念,并且在多个 table 中重复相同的信息。
我想清理它并稍微设置一个可以保持关系更新的过程。例如,如果一个人的邮政编码发生变化或记录被删除,那么它会自动更新其与其他 tables row/s.
的关系注意:* 我的问题是规范化现有数据库 tables。 table 是实时的,那么我该如何处理标准化?我是否创建一个具有我想要的 table 结构的全新数据库,然后将数据移动到该数据库?数据移动后,我插入存储过程并导入?
这个问题有点笼统,所以我只解释一下概念。
视图 通常 用于 reporting/data 演示目的,因此我不会尝试将它们标准化。您的情况可能有所不同。
你还需要清楚主/外键的概念:
缺少在 table 上定义的实际约束(例如 PRIMARY KEY
、FOREIGN KEY
)并不意味着 table 在列上没有逻辑关系。
数据维护可以在Triggers
.
如果您确实遇到 tables 中无明显原因存在大量高度非规范化数据的情况,并且您想对其进行规范化,那么可以通过两种方式解决此问题:
- 完全重写 - 我会推荐小型/新应用程序
- "Gradual" 重构 - 大型/成熟的应用程序,其中底层数据关系复杂和/或可能未被完全理解。
在 "Gradual" 重构中也有几种方法:
2.a。您将 1 个旧 table 替换为新 table,同时将所有使用旧 table 的代码更改为使用新 table。对于大型系统,这可能会有问题,因为您可能根本不知道引用此 table 的所有位置。另一方面,它可能对 table 结构变化不显着 and/or 当依赖项数量较少时有用。
2.b。另一种方法是以您想要的形状/形式创建新的 table(s) (在同一数据库中)。当前的 tables 应替换为 View
s 与 return 相同的数据(与旧的 tables 相同,但来自 "new" tables .这种方法消除/最小化了立即修改所有依赖项的需要。缺点是替换旧 table 的视图会变得相当复杂,特别是如果需要实现 View Instead Of Trigger
s。