我想建立一个在线反馈系统。要求是
我的桌子结构是

虚拟数据(并非所有列)
Questions
---------
QuestionId Question
1 Question 1
2 Question 2
3 Question 3
4 Question 4
5 Question 5
Feedback
--------
FeedbackId Questions
2 1,2,3,4,5 -- Questions column has questionid from Question table
FeedbackResults
---------------
FeedbackResId FeedbackId QuetionID Answers UserId
1 2 4 4 1
2 2 1 3 1
3 2 5 3 1
4 2 1 2 2请给这个设计打分,并提供有价值的建议。逗号分隔值是否负担得起?
发布于 2019-12-13 18:02:45
设计需要简化。根据您的解释,您只需要3个表(问题、答案和反馈),其余的就不需要了,因为您可以JOIN这些表。
逗号分隔值是否负担得起?
对于你的设计,不,你不需要,这并不总是一个好主意去做。有些情况你可以做到,而且可能对你有益,但这些都是罕见的情况。保持简单和标准,不要将列或行连接到单个值中,除非这是必需的!
因此,如果您的Feedback.Questions打算以逗号分隔的值存储问题的值,我建议您更改这个值。只要给每个问题一个新的反馈id,这样就更容易管理了。而不是存储问题字符串,而只是存储questionId (FK)。这样会更合适,而且处理得更快。
所以我建议你把它改造成:
#ListStatus
- Id [PK|IDENTITY]
- Description
#ListRate
- Id [PK|IDENTITY]
- Description
#FeedbackQuestions
- Id [PK|IDENTITY]
- Question
- CreatedAt
- UpdatedAt
- Deleted
- StatusId
- UserId
#FeedbackAnswers
- Id [PK|IDENTITY]
- QuestionId
- Answer
- CreatedAt
- UpdatedAt
- Deleted
- UserId
#Feedback
- Id [PK|IDENTITY]
- RateId
- QuestionId
- AnswerId
- CreatedAt
- Deleted
- UserId Listxxx表将存储固定描述值的列表。例如,ListRate会存储诸如优秀、非常好、好、公平、差的..etc等利率选项。当用户对答案进行评级时,ListRate的Id将被插入到Feedback表中。
此外,由于我们用前缀List来定义它们,所以在系统设计中将标准化,以便在其他表上通用,最好是更容易理解(这样,开发人员就可以从表名中了解这些表的用途)。
我在UserId和CustomerId之间搞混了,但是我使用了userId,所以您使用的是logged-in users,不管是来自Admin还是一些使用系统的客户,最后,您需要记录做出这些更改的Username。
另一件事,你可能需要添加一个类别的问题,并可能是反馈。这将对过滤结果非常有帮助。你不想依赖任何用开放文本存储用户输入的列,这将是一个真正的痛苦。因此,在问题中添加一个类别,将其值存储在另一个表中,使其有两列(一列用于为用户显示文本,另一列是id),这将使处理起来更容易,如果您看到可以添加更多筛选选项(支持子类别或标记..etc),就会选择它。
样本:
| Id | Question | CreatedAt | UpdatedAt | Deleted | StatusId | UserId |
|----|------------|----------------------|-----------|---------|----------|--------|
| 1 | Question 1 | 2019-12-14T00:00:00Z | (null) | (null) | 1 | User 1 |
| 2 | Question 2 | 2019-12-14T20:40:15Z | (null) | (null) | 2 | User 2 |
| 3 | Question 3 | 2019-12-14T07:05:01Z | (null) | (null) | 3 | User 3 || Id | QuestionId | Answer | CreatedAt | UpdatedAt | Deleted | UserId |
|----|------------|----------|----------------------|-----------|---------|---------|
| 1 | 1 | Answer 1 | 2019-07-05T00:00:00Z | (null) | (null) | User 50 |
| 2 | 1 | Answer 2 | 2019-07-05T00:00:00Z | (null) | (null) | User 50 |
| 3 | 1 | Answer 3 | 2019-07-05T00:00:00Z | (null) | (null) | User 70 |
| 4 | 2 | Answer 1 | 2019-07-05T00:00:00Z | (null) | (null) | User 70 || Id | RateId | QuestionId | AnswerId | CreatedAt | UpdatedAt | Deleted | UserId |
|----|--------|------------|----------|----------------------|-----------|---------|---------|
| 1 | 1 | 1 | 3 | 2019-07-05T00:00:00Z | (null) | (null) | Admin |
| 2 | 2 | 2 | 4 | 2019-07-05T00:00:00Z | (null) | (null) | User 23 |
| 3 | 2 | 1 | 2 | 2019-07-05T00:00:00Z | (null) | (null) | User 5 |
| 4 | 5 | 1 | 3 | 2019-07-05T00:00:00Z | (null) | (null) | User 23 |https://codereview.stackexchange.com/questions/233253
复制相似问题