【问题标题】:Design Normal Form in sql server在sql server中设计范式
【发布时间】:2011-08-08 17:45:19
【问题描述】:

我有 2 张桌子(FirstTable 和 SecondTable)。我的 FirstTable 是表头,SecondTable 是明细表,但是 FirstTable 有复杂的主键。如何在我的 SecondTable 中引用第一个正常且最佳选择的表。

【问题讨论】:

    标签: sql-server sql-server-2005 sql-server-2008 database-design normalization


    【解决方案1】:

    在您的情况下,至少有三种方法可以做到这一点。您选择的方式取决于您尚未告诉我们的信息。

    在选择之前三思而后行。您提出这样一个非常基本的问题这一事实表明您在实施过程中可能会犯错误。 (这是一种观察,而不是批评。)首先处理数据库的草稿副本。期待摧毁它。

    1. 存储整个主键 SecondTable 中的 FirstTable。那 表示为 Key_F2 添加一列 SecondTable,用 正确的数据,丢弃旧的 约束,并添加一个新的, 这将包括一个像 foreign key (Key_F1, Key_F2) references FirstTable (Key_F1, Key_F2)
    2. 声明一个唯一的约束 FirstTable.Key_F1。然后你可以添加 SecondTable 的新约束 这将包括一个像 foreign key (Key_F1) references FirstTable (Key_F1)。当然这个 仅当值在 FirstTable.Key_F1 是唯一的。
    3. 向 SecondTable 添加一列进行存储 FirstTable.ID 中的值,以及 用右边填充该列 数据。然后你可以删除列 SecondTable.Key_F2,并设置一个外键 从 SecondTable.ID 引用到 FirstTable.ID。

    【讨论】:

    • 非常感谢。我想关于 No.3 并且我想知道当我想根据 ID 加入 First 和 Second 表时是否使用 IDENTITY ID 是优化器使用索引是否有过?归一化和优化的最佳方法是什么?
    • 您可以在 FirstTable 中使用 IDENTITY。 (不在 SecondTable 中。)优化器将使用它认为有用的任何索引。您可能应该对连接或 WHERE 子句中使用的每一列都有一个索引。有时,在一对列上创建一个索引比在两列中的每一列上创建一个索引更好。
    猜你喜欢
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多