2012-03-02 11 views
0

データベース設計に問題があります。 が、私は心の中で2つのオプションがありますが、それらのどれもが本当に私の問題を解決していない:異なる回答データ型を持つ多くの質問のデータベース設計

オプション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の問題は、フィールド「値」のデータ型は、本当にすべてのものにできることです!私は、各データ型のテーブルや

  • FBにテーブル変更作成

    1. 考える(ID、年、質問、Valueint、ここで、valueStringを、... .etc。)

    その問題を解決するために、 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 Answers (
        ID int not null, 
        Year int not null, 
        QuestionID varchar(5) not null, 
        AnswerType varchar(10) not null, 
        IntAnswer int null, 
        CharAnswer varchar(max) null, 
        BoolAnswer bit null, 
        constraint FK_Answers_Questions FOREIGN KEY (QuestionID) references Questions, 
        constraint FK_Answers_Question_TypeCheck FOREIGN KEY (QuestionID,AnswerType) references Questions (QuestionID,AnswerType), 
        constraint CK_Answer_Types CHECK (
         (IntAnswer is null or AnswerType='INT') and 
         (CharAnswer is null or AnswerType='CHAR') and 
         (BoolAnswer is null or AnswerType='BOOL') and 
         (IntAnswer is not null or CharAnswer is not null or BoolAnswer is not null) 
        ) 
    ) 
    

    :ありがとう...

  • +0

    ようこそStackOverflow:コード、XML、またはデータサンプルを投稿する場合、**これらの行をテキストエディタで強調表示し、エディタツールバーの[コードサンプル]ボタン( '{}')をクリックしてくださいフォーマットと構文はそれを強調する! –

    答えて

    2

    私は

    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) 
    ) 
    

    とのために行くだろうデータはテーブル内で終了します。


    2つの外部キーの使用が必要な本当に(あなたがFK_Answers_Questionsを削除することもできます)ではありませんが、我々は全体の制約を強制する一方で、私は、本当のFK参照がQuestionIDであることを文書化することを好みます2番目のテーブルと新しいCHECKという制約を使用してテーブルを作成します。

    0

    私は2つのテーブルを作成します。

    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を返したことを検証する機能やSPROCを作成します。残念ながら、私はそのコードを書く時間がありません。

    関連する問題