Database 针对不同答案数据类型的许多问题的数据库设计

Database 针对不同答案数据类型的许多问题的数据库设计,database,database-design,Database,Database Design,我的数据库设计有问题。 我有两个选择,但没有一个能真正解决我的问题: 备选案文1: FB (ID, Year, Question, Value) 1 | 2004| Q1 | hello 1 | 2004| Q2500 | 15.2.12 1 | 2004| Q2 | 56€ 1 | 2003| Q1 | bye 2 | 2003| Q2 | 55€ 选项1的问题是,字段“Value”的

我的数据库设计有问题。 我有两个选择,但没有一个能真正解决我的问题:

备选案文1:

FB (ID, Year, Question, Value)  
    1 | 2004| Q1      | hello  
    1 | 2004| Q2500   | 15.2.12  
    1 | 2004| Q2      | 56€  
    1 | 2003| Q1      | bye  
    2 | 2003| Q2      | 55€  
选项1的问题是,字段“Value”的数据类型实际上可以是所有内容!为了解决我想到的那个问题

  • 为每种数据类型或类型创建表
  • 将表格更改为FB(ID、年份、问题、Valueint、Valuestring等)
  • 都不是1。也不是2。对我来说似乎是对的

    备选案文2:

       FB (ID, Year,   Q1,    Q2,   ….,   Q2500)   
        1| 2004 | hello| 56€ |,....,| 15.2.12  
        1| 2003 | bye  | …...|,….., |…..  
        2| 2003 | salut| 55€ |, …..,|…..    
    
    问题数量(Q1-QX)可能变化很大

    任何建议都将不胜感激!谢谢…

    我会去的

    CREATE TABLE Questions (
       QuestionID varchar(5) not null primary key,
       AnswerType varchar(10) not null,
       constraint CK_Question_Types CHECK (AnswerType in ('INT','CHAR','BOOL')), --Add more appropriate type names
       constraint UQ_Questions_TypeCheck UNIQUE (QuestionID,AnswerType)
    )
    
    以及:

    这使您可以确保每个答案的类型正确且不为null,同时确保表中没有多余的数据



    实际上并不需要使用两个外键(您可以删除
    FK\u Answers\u Questions
    ),但我更喜欢记录真正的FK引用在
    QuestionID
    上,同时我们希望使用第二个和新的
    CHECK
    约束跨表强制执行约束。

    我将创建两个表:

    Create Table tblQuestions (
         ID int IDENTITY(1,1) NOT NULL,
         Year varchar(4) Default '',
         QuestionText varchar(4000) Default '',
         AnswerDataType varchar(50) Default '' )
    
    Create Table tblAnswers (
         ID int IDENTITY(1,1) NOT NULL,
         tblQuestions_ID int Default 0,
         Answer varchar(255) Default '' )
    

    然后我将创建一个函数或存储过程来验证答案是否以正确的数据类型给出,并返回TRUE或FALSE。不幸的是,我没有时间编写代码。

    欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(
    {}
    ),以很好地格式化和语法突出显示它!
    Create Table tblQuestions (
         ID int IDENTITY(1,1) NOT NULL,
         Year varchar(4) Default '',
         QuestionText varchar(4000) Default '',
         AnswerDataType varchar(50) Default '' )
    
    Create Table tblAnswers (
         ID int IDENTITY(1,1) NOT NULL,
         tblQuestions_ID int Default 0,
         Answer varchar(255) Default '' )