2

我正在做一个问答网站。我需要设计一些投诉主持人流程表。在这个过程中,任何用户都可以投诉问题,当特定类型的问题投诉数量达到一定数量时,版主将接受投诉。

详细地:

用户提出问题。然后,另一个用户阅读了这个问题,想要标记一种投诉。

当此用户用任何类型的投诉标记问题时,它将被保存。标志具有类型属性(ComplaintA、ComplaintB、ModeratorAttention、..)。

版主可以看到任何问题的标志。如果某个问题的 ComplaintA 类型标志的数量达到一定数量(常数,如 10),版主将接受这些标志。

然后,这些相同类型的标志将与一条消息一起保存,该消息将在标志者的问题下看到(ProcessType is ComplaintsAccepted)。

然后,当提出问题的用户可以在修复他的问题后向版主发送带有消息的标志。如果更正满意(ProcessType为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

表关系: ModeratorProcesses - 1:m - 标志 - n:1 - 问题

对于这个过程来说,这是一个好的数据库设计吗?

4

1 回答 1

1

这对这个过程来说是一个好的数据库设计吗?

您的数据库设计似乎符合您的要求。

实体名称通常是单数,而不是复数。用户、问题、标志、主持人进程。

在 Flag 实体中,不调用列 FlaggerId,而是调用列 UserId。这样,外键关系就很明显了。在 ModeratorProcess 实体中将 ModeratorId 更改为 UserId。您的 FlagType 和 ProcessType 注释很好,因为它们解释了该列。

与其在 ModeratorProcess 实体中使用 DateOfProcess,不如将其称为 ProcessTimestamp。那应该是一个日期/时间字段。您可能需要 Flag 表中的时间戳字段。

于 2013-05-25T12:13:23.967 回答