【问题标题】:Design a database设计数据库
【发布时间】:2010-11-29 09:00:24
【问题描述】:

我想要以下问题的最佳解决方案。 我正在使用 SQL Server 2005 和 asp.net 2.0。

我有一个主表,其中存储了不同项目的所有测试脚本。 从主表中的测试脚本中,我需要创建一个模块并将所需的测试脚本添加到模块中。

用户界面设计是: 创建新模块。 从主表中选择所需的测试用例。 将测试用例添加到模块中。

用户可以使用主表中不同的测试用例组合创建任意数量的模块。

例如 - 主表有 100 个测试用例。我创建了 2 个模块。 Module1 有 40 个从主表中选择的测试用例。 Module2 有 20 个从主表中选择的测试用例。

在这种情况下如何设计数据库?

【问题讨论】:

    标签: asp.net sql-server database-design


    【解决方案1】:

    阅读Rules of Data Normalization

    总结:

    1. 1NF 消除重复组 - 为每组制作一个单独的表格 相关的属性,并给每个 表一个主键。
    2. 2NF 消除冗余数据 - 如果 属性仅取决于 a 的一部分 多值键,将其删除到 单独的表格。
    3. 3NF 消除不相关的列 On Key - 如果属性不 有助于描述 键,将它们移到单独的 桌子。 .......

    【讨论】:

      【解决方案2】:

      要获得类似于第 3 范式的东西,您基本上至少需要 3 个表。

      您有测试用例表(它是包含所有测试用例的主表)。然后你有一个模块表,它为用户创建的每个模块创建一个条目。然后你有一个 test_modules 表,外键返回到模块表和测试用例表。

      当您创建一个新模块时,您将在模块表中插入一个新行。对于为该模块选择的每个测试用例,您将在 test_modules 表中插入一行。每一行都有一个指向模块表的 FK(以便您知道它属于哪个模块)和一个指向测试用例表的 FK(这样您就知道它是什么测试用例)。

      testcase Table (Master Table) {
          id
          test_case_name
      }
      
      modules table {
          id (PK)
          module_name (varchar)
          creater (varchar)
      }
      
      test_modules table {
          id (PK)
          testcase_id (FK to testcase.id)
          module_id (FK to modules.id)
      }
      

      因此,要获取特定模块的测试用例,您可以执行如下查询:

      select *
      from modules m, testcase t, test_modules tmod
      where m.id=tmod.module_id and tmod.testcase_id = t.id
      

      这是一个非常简单且低效的查询,但它可以帮助您入门。

      【讨论】:

        【解决方案3】:

        “我有一个主表”

        “我如何设计数据库?”

        前两个答案为您提供了有关表格设计的详细信息。当您设计表以存储与模块和脚本有关的数据时,这些细节将很有用。但是,您需要了解一些其他基础知识。

        主表的设计是数据库设计的一部分。如果主表的设计对您正在进行的项目非常不利,那么重新设计主表可能是最好的计划,具体取决于具体情况。

        规范化并不是发现好的设计的唯一方法。特别是,引用给您的 2NF 和 3NF 规则将帮助您在您设计的表上执行插入、更新和删除操作时避免异常。但是 noprmalization 不会帮助您更轻松地进行选择。

        学习如何遵循规范化规则需要几周时间。学习何时忽略这些规则,以及如何在这样做时提出一个好的设计需要更长的时间。

        【讨论】:

          猜你喜欢
          • 2011-09-30
          • 2011-01-12
          相关资源
          最近更新 更多