上次我做了一个Q &一个系统处理由多页问题组成的调查。答案可以是复选框,单选按钮或多选的选择框,或文本输入(可选地限制为整数值)。
的表看起来是这样的:
-- There are pages of questions.
CREATE TABLE [dbo].[Pages] (
[PageId] [int] IDENTITY (1, 1) NOT NULL ,
[Name] [varchar] (128) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[Description] [varchar] (1024) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[PageTypeId] [int] NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[PageTypes] (
[PageTypeId] [int] IDENTITY (1, 1) NOT NULL ,
[Name] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[Description] [varchar] (1024) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[TargetPages] (
[QuestionId] [int] NOT NULL ,
[PageId] [int] NOT NULL ,
[Rank] [int] NOT NULL
) ON [PRIMARY]
GO
-- Questions have input fields. Perhaps a text entry, perhaps several multiple-guess choices.
CREATE TABLE [dbo].[Questions] (
[QuestionId] [int] IDENTITY (1, 1) NOT NULL ,
[StartDate] [datetime] NOT NULL ,
[EndDate] [datetime] NOT NULL ,
[Description] [varchar] (1024) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[Filespec] [varchar] (128) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Fields] (
[QuestionId] [int] NOT NULL ,
[FieldId] [int] IDENTITY (1, 1) NOT NULL ,
[FieldName] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[InputTypeId] [int] NOT NULL ,
[Description] [varchar] (256) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[InputTypes] (-- Roughly: checkbox, radio button, text, textarea or select list.
[InputTypeId] [int] IDENTITY (1, 1) NOT NULL ,
[InputTypeName] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[Choices] [bit] NOT NULL ,
[NumericValue] [bit] NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Choices] (-- Defines radio button or select list choices for multiple choice questions.
[FieldId] [int] NOT NULL ,
[cName] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[cValue] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[Rank] [int] NOT NULL
) ON [PRIMARY]
GO
-- Then we have the answers supplied by users.
CREATE TABLE [dbo].[Inquiries] (
[InquiryId] [int] IDENTITY (1, 1) NOT NULL ,
[UserId] [int] NOT NULL ,
[QuestionId] [int] NOT NULL ,
[dTimestamp] [datetime] NOT NULL ,
[ResponseSequence] [int] NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Users] (
[UserId] [int] IDENTITY (1, 1) NOT NULL ,
[Username] [varchar] (16) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Responses] (-- Multiple choice.
[InquiryId] [int] NOT NULL ,
[FieldId] [int] NOT NULL ,
[FieldValue] [varchar] (1024) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[IntegerResponses] (-- User supplied integer or multiple choice value.
-- NB: Checkbox values are handled thusly: a row here indicates the box was checked, no row is unchecked. The value is meaningless.
[InquiryId] [int] NOT NULL ,
[FieldId] [int] NOT NULL ,
[FieldValue] [int] NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[TextResponses] (-- User supplied text.
[InquiryId] [int] NOT NULL ,
[FieldId] [int] NOT NULL ,
[FieldValue] [varchar] (1024) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
GO
exec sp_addextendedproperty N'MS_Description', N'1 ==> Values are in the Choices table.', N'user', N'dbo', N'table', N'InputTypes', N'column', N'Choices'
GO
exec sp_addextendedproperty N'MS_Description', N'1 ==> Values are numeric.', N'user', N'dbo', N'table', N'InputTypes', N'column', N'NumericValue'
GO
的查询不停地运行到上允许的SELECT
,256左右的表的数量限制。
是否有命令的问题?问题是问题的一部分,例如调查?是/否,多项选择,数字或文章?你关心谁回答了问题,何时和多久?问题可能随时间而改变或退休? BIGINT是否不足以用于识别? – HABO 2012-08-02 19:36:36
@HABO在问题中有一个顺序,是的,有一些问题的答案是肯定的,是的,我关心谁回答了问题,问题可以添加但不会随着时间而改变,以保持答案的完整性。 – 2012-08-02 21:20:12