我正在一个网站上,用户可以选择适用于他们的特定日期,例如日期1,日期2,日期3等。
每个日期都会有属于它的某些问题,因此如果客户选中“日期1”以表明此日期适用于他,那么他会看到一堆文本框,询问他有关日期1及其适用方式的信息。给他们。所有其他日期也一样。
日期1和2以及几个问题,但其余日期只有一个问题。
这些日期及其答案稍后将用于为客户创建个性化提醒并发送给他。
我也喜欢一种设计,它可以简单(或尽可能简单)添加额外的日期和字段。
我的问题是,在数据库中存储与用户相关的所有日期和答案的最佳方法是什么?我想在user
表中,我有boolean
列来自日期1 - 上一个日期(显然它们实际上并没有命名为日期1,日期2等)。如果将日期1的列设置为0,则表示客户没有将其关闭,如果是1那么这意味着他做了,并且他回答了问题。
关于日期的实际存储,我正在考虑这两个选项:
1)每个日期有1个表格,每个问题的列都是{1}}列。因此,在user_id
表中,我会有Date_1
,Q1_name
等列以及用户提出的问题的答案。
但我想要更优雅的东西,因为1),在计算什么信息时,它会使获取所有用户的答案变得很痛苦。发送个性化电子邮件时适用于他们。 2)有些日期只有一个问题,所以为他们创建一个完整的表格会很难看。
2)一个Q2_name
表,其中包含以下列:
user_answer
到目前为止,2似乎是最优雅的,但应该有更好的解决方案。有什么想法吗?
答案 0 :(得分:3)
听起来你想要以下(基本)表结构:
userId, userInfo
dateId, dateInfo
questionId, questionInfo
userId, dateId
- 这会存储适用于给定用户的所有日期,并代表用户和日期之间的多对多关系 - 用户可以拥有多个日期和日期可以有很多用户dateId, questionId
- 这会存储适用于给定日期的所有问题,并代表日期和问题之间的多对多关系 - 日期可以有很多问题,我假设,一个问题可用于对抗多个日期userId, questionId, questionResponse
- 这会存储所有用户对所提问题的回复。如果您需要知道问题适用于哪个日期,假设他们可以针对多个日期多次回答同一问题,请添加dateId
列。答案 1 :(得分:1)
选项2似乎接近良好的解决方案,但我会将date_name
和question_name
替换为date_id
和question_id
。
一个最佳,最简单的解决方案,可以添加新的问题和日期似乎是:
1.日期表格,其中包含date_id, title, date
字段
2.带有question_id, date_id, title
字段的问题表(可能输入答案和描述)
3.包含question_id
和answer
的答案表。
您还需要决定是否有几个日期常见的问题,以及在这种情况下该怎么做。 (您可能需要两个不同的答案,或一个共同的答案)。我建议不要使用第一个解决方案,它会使问题不是动态的 - 你必须为问题或日期中的每个更改更改sql和table结构。
答案 2 :(得分:1)
我认为你已经得到了它,唯一的问题是你可以将问题和日期名称分成一个单独的表,给你以下架构:
用户:
id, ...
(姓名,出生日期,喜欢的食物等)
DateName :id, name
(称为DateName,因此与单词Date没有冲突,这可能意味着SQL中的其他内容)
问题:id, date_id, text
UserAnswer :user_id, question_id, answer_val
没有必要将它们分开,但有三个理由:
1.整数查找(如question_id
)而不是文本(如question_name
)要快得多,因为整数较小并且大小固定。
2.如果您将文本更改为问题(如更正拼写错误),则只需更改Question中的单个条目,而不是每行。
3.因为您只存储了一次文本,所以可以节省大量空间。存储1000个int小于存储1000个字符串。只要字符串长于几个字符就可以了。
除此之外,我认为可以很好地运作。