我现在正在创建一个类似于 Reddit 的网站。在这里,用户可以撰写帖子,而其他用户(包括作者)可以对帖子进行评论和/或赞成/反对(1 或 -1) 。
为了存储必要的数据,我设计了以下SQL模型,但是由于这是我第一次设计SQL模型,我不确定我做得好不好,所以我想问一下我的模型好不好。
顺便说一下,我尝试将其规范化为第三范式。
USERS = (email, familyName, givenName, Password);
POSTS = (Id_posts, #email, postText, postDate);
TO_COMMENT = (#email, #Id_posts, commentText, commentDate);
TO_VOTE = (#email, #Id_posts, vote);
我预先感谢所有愿意花时间为我提供建议的人。
PS:对于投票的总分,我考虑使用 sum (),这就是为什么它不分为两部分(赞成票和反对票)。
只是一些想法:
我强烈建议添加人工 Id 列作为用户的主键。(与您已经拥有用于 POSTS 的Id_posts相同。)虽然电子邮件肯定是唯一的,但这也意味着更改它会非常困难(因为它将位于整个数据库的所有表中) )。如果它只是另一个字段,您可以轻松更改它。
您可以自己发表评论并投票吗?如果是这样,那么我建议 POSTS 和 TO_COMMENT 是同一件事,只是通过评论是对帖子的回复这一事实来区分。因此,我将合并这两个表,并简单地将 ParentPost_ID 外键引用返回到父帖子的表中。(你的帖子就只是帖子
WHERE ParentPostID IS NULL
。)但这是有争议的一点。您在这里所做的当然是有效的,特别是如果帖子和评论之间存在差异的话。
一般来说,建议使用名词作为表名。IE。评论、投票。它通常更具描述性,因为它是存储在表中的对象,而不是actions。
修复电子邮件问题,但总的来说,我认为您当前的设计很好。
我不明白为什么要尝试重新发明轮子。
完毕!您拥有一个面向未来的数据库。