我正在研究问答网站。我需要设计一些投诉主持人流程表。在这个过程中,任何用户都可以抱怨问题,主持人可以在针对某个问题的特定类型的投诉达到一定数量时接受投诉。
详细信息:
用户提出问题。然后,另一个用户阅读了这个问题,希望标记一种投诉。
当此用户使用任何类型的投诉标记问题时,都会保存该问题。标志具有类型属性(ComplaintA,ComplaintB,ModeratorAttention,..)。
版主可以查看有关任何问题的标记。如果有关问题的ComplaintA类型标记数量达到一定数量(常数如10),则主持人将接受这些标记。
然后,这些相同类型的标志将被保存一条消息,该消息将被标记者看到(ProcessType是ComplaintsAccepted)。
然后,当提出问题的用户在解决问题后可以向主持人注意发送带有消息的标记。如果修正令人满意(主题类型为ResolutionAccepted),主持人可以接受投诉的解决方案。
我的草稿设计细节:
Users (Table of Sql Membership Provider)
-----
- UserId
- Password
- Email
-...
Questions
---------
- QuestionId
- ...
Flags
----------
- FlagId
- QuestionId
- FlaggerId --> Flagger is a user
- FlagType --> ComplaintA, ComplaintB, ModeratorAttention
- FlagMessage
ModeratorProcesses
------------------
- ProcessId
- ProcessMessage
- QuestionId
- FlagType
- ProcessType --> ComplaintAccepted / ResolutionAccepted / DeleteAccepted
- ModeratorId --> Moderator is a user
- DateOfProcess
表关系: 主持人程序 - 1:m - 标志 - n:1 - 问题
这是一个很好的数据库设计吗?
答案 0 :(得分:1)
这是一个很好的数据库设计吗?
您的数据库设计似乎符合您的要求。
实体名称通常是单数,而不是复数。用户,问题,旗帜,主持人过程。
在Flag实体中,不要调用列FlaggerId,而是调用UserId列。这样,外键关系是显而易见的。在ModeratorProcess实体中对ModeratorId进行相同的更改为UserId。您的FlagType和ProcessType注释很好,因为它们解释了该列。
而不是ModeratorProcess实体中的DateOfProcess,将其称为ProcessTimestamp。那应该是一个日期/时间字段。您可能需要Flag表中的时间戳字段。