【问题标题】:Store answers in sql table with unique id and store each answer in columns将答案存储在具有唯一 ID 的 sql 表中,并将每个答案存储在列中
【发布时间】:2012-12-23 01:02:46
【问题描述】:

我已经编程一年了,但从那以后我再也没有在任何地方问过问题。我有一个架构问题。我有 78 个问题和答案,这些问题在 html 代码中是静态的,除了问题 40 和 41 之外,所有问题都可以回答为是、否、不适用。我将答案存储在一个表格中,每个表格都有一个列问题。例如, 表答案:

userid (unique)
companyid (unique)
q1
q2
q3
...
q100

答案表中每个公司只有一个唯一的行。如果用户编辑问卷,则该行将被转移到历史表并再次插入新行。如果我使用表格来回答问题或答案,那么对于每家公司,我将有 78 或 100 行带有答案的数据(在这种情况下,答案将来自下拉列表,其中只有是、否和 n/a 作为唯一选项.

我想知道是否有更好的方法来实现这一点,因为我需要实现 3 个不同的 sql 语句(问卷不完整、完整或至少有一个答案设置为“否”的问卷)或代替 using 语句为了识别每个问卷,我应该添加一个带有状态的新列并使用后面的代码吗?

我尽量说清楚,任何建议都会被欣赏。

【问题讨论】:

    标签: c# asp.net sql sql-server-2008 tsql


    【解决方案1】:

    我更喜欢创建一个存储 userid、questionid 和 answerid(或答案本身)的表。这样,您可以轻松地将新问题引入系统,而无需修改表结构。它还应该更容易确定是否有人至少回答了一个问题。

    有一些潜在的缺点,只是取决于具体情况。

    【讨论】:

    • 然后我又有一个用户表和一个公司表。答案表将只有每个公司的唯一行。如果用户编辑问卷,则该行将被转移到历史表并再次插入新行。如果我使用表格来回答问题或答案,那么对于每家公司,我将有 78 行数据和答案(在这种情况下,答案将来自下拉列表,其中只有是、否和 n/a 作为唯一选项。
    • 完全理解,但我仍然建议标准化您的数据。在您的问题中,您问是否有更好的方法。在您的情况下,标准化通常是最好的方法。这种方法(如果正确完成)还允许您灵活地添加和删除问题,而无需更改代码。而且我不会担心 78 行数据——至少不会影响性能,实际上可以根据表中列的数据类型来改进它。祝你好运!
    【解决方案2】:

    您需要Normalize您的数据。标准化有多个级别,但通常以3rd Normal Form 为目标是一个好主意。这里是a tutorial on the first 3 normal forms

    在您的情况下,您可能不希望问题成为列,因为问题可能具有“问题文本”和“问题类型”之类的属性,并且人们可能会希望稍后添加和编辑问题。

    考虑制作一个问题表,每个问题都是该表中的一条记录。

    例如,答案可能是另一个表,外键指向正在回答的问题,并且有一列用于实际答案。可能还会有外键返回给用户和公司。

    【讨论】:

    • 然后我又有一个用户表和一个公司表。答案表将只有每个公司的唯一行。如果用户编辑问卷,则该行将被转移到历史表并再次插入新行。如果我使用表格来回答问题或答案,那么对于每家公司,我将有 78 行数据和答案(在这种情况下,答案将来自下拉列表,其中只有是、否和 n/a 作为唯一选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多