V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
TANKING
V2EX  ›  程序员

关于网站的评论,留言功能是怎么开发的?

  •  
  •   TANKING · 2018-03-04 08:44:52 +08:00 via iPhone · 5512 次点击
    这是一个创建于 2458 天前的主题,其中的信息可能已经有所发展或是发生改变。
    单页面的评论功能我知道怎么做,但是如果我的网站是一个博客,每发表一篇文章,底部都会有一个评论输入框,所以,我每发布一篇文章,都得向数据库新建一个表吗?还是只需要一个表,可以存放所有文章的底部评论?
    28 条回复    2018-03-04 23:00:25 +08:00
    eyewater
        1
    eyewater  
       2018-03-04 08:51:02 +08:00 via Android
    需要一个表可以存放所有文章的评论,通过外键与文章关联,显示的时候把每篇文章对应的评论通过外键进行查找即可
    TANKING
        2
    TANKING  
    OP
       2018-03-04 09:00:27 +08:00 via iPhone
    @eyewater 不太懂外键,初学 MySQL
    lulinux
        3
    lulinux  
       2018-03-04 09:00:51 +08:00
    评论输入框是前端模板中的一部分。只有发表了评论,才会操作后台数据库。
    loading
        4
    loading  
       2018-03-04 09:03:40 +08:00 via iPhone   ❤️ 2
    文章表:文章 id,文章标题,文章内容
    评论表:文章 id,评论 id,评论内容

    文章 id=文章 id
    TANKING
        5
    TANKING  
    OP
       2018-03-04 09:04:25 +08:00 via iPhone
    @lulinux 所以是如何操作,数据库如何设计才会让所有的文章的评论都存放到一个表呢?
    wemore
        6
    wemore  
       2018-03-04 09:04:44 +08:00 via Android
    评论表:评论的一堆字段+文章 id。查文章的时候去评论表查对应文章 id 的评论。
    suzic
        7
    suzic  
       2018-03-04 09:07:01 +08:00 via Android
    4l 简单可行
    TANKING
        8
    TANKING  
    OP
       2018-03-04 09:07:03 +08:00 via iPhone
    @wemore 谢谢,这么说的话,好像有点眉头了😎😎😎
    eyewater
        9
    eyewater  
       2018-03-04 09:08:06 +08:00 via Android
    @TANKING 4l 说的对,可以忽略我的了
    TANKING
        10
    TANKING  
    OP
       2018-03-04 09:08:23 +08:00 via iPhone
    @eyewater 看明白了😊
    nuxt
        11
    nuxt  
       2018-03-04 09:14:50 +08:00   ❤️ 3
    一个文章可以有多个评论,
    一个评论只属于一个文章,
    所以是一对多的关系,
    所以只需要在 comments 表里添加 post_id 就可以了,表明这个 comment 属于哪个 post_id
    loading
        12
    loading  
       2018-03-04 09:20:53 +08:00 via iPhone
    这是关系型数据库的一般用法,这就是 关系。
    a378725574
        13
    a378725574  
       2018-03-04 09:24:35 +08:00 via Android
    之前遇到过邮政宁愿送上楼也不肯放到快递柜,而且明言是可以省几毛钱。不过其他快递员都是直接放快递柜
    Tink
        14
    Tink  
       2018-03-04 09:24:36 +08:00 via iPhone
    存储 blog 文章页 url
    a378725574
        15
    a378725574  
       2018-03-04 09:25:10 +08:00 via Android
    我去回错帖
    laycher
        16
    laycher  
       2018-03-04 09:25:28 +08:00   ❤️ 1
    搞个 wordpress,你自己可以写几条测试数据,看看数据库内容。
    qping
        17
    qping  
       2018-03-04 09:26:53 +08:00
    @a378725574 #13 走错片场了,兄弟
    Allianzcortex
        18
    Allianzcortex  
       2018-03-04 09:26:54 +08:00 via iPhone
    同 #4 @loading 用表结构和业务逻辑来存储比较好,尽量少用外键 foreign key
    ericgui
        19
    ericgui  
       2018-03-04 10:13:58 +08:00
    其实评论还算 OK 的,但问题是那种盖楼的评论,就需要你仔细琢磨了。
    @laycher 你这个思路好
    panda1001
        20
    panda1001  
       2018-03-04 10:15:30 +08:00 via Android
    可以参考下 wordpress 的数据库结构
    orangeade
        21
    orangeade  
       2018-03-04 10:16:05 +08:00 via Android
    去看一下一些开源项目就知道了,比如 WordPress
    bbzt
        22
    bbzt  
       2018-03-04 10:17:22 +08:00
    很简单啊,搞得我都想去做个收费的云评论服务
    MonoLogueChi
        23
    MonoLogueChi  
       2018-03-04 11:09:40 +08:00 via Android
    前面说的很清楚了,大概就是每篇文章要有一个唯一的 key,这个 key 怎么产生你随意,加载评论的时候就是在数据库里搜索这个 key。而且每条评论也要有一个唯一的 key,回复评论的时候需要用到这个 key。
    coffeSlider
        24
    coffeSlider  
       2018-03-04 11:10:24 +08:00 via Android
    @bbzt 那么多免费的评论插件,你还想做收费的?
    lewis1990
        25
    lewis1990  
       2018-03-04 13:28:05 +08:00
    @loading 正解,那如果再涉及到评论回复的又该怎么设计?
    locoz
        26
    locoz  
       2018-03-04 17:34:50 +08:00
    一般都是文章一个 ID 加载评论的时候用文章 ID 去查对应的评论
    评论自己有一个 ID 然后有一个上一层级的 ID (可以是文章的也可以是评论的)
    文章跟评论两个表解决
    crossoverJie
        27
    crossoverJie  
       2018-03-04 21:38:03 +08:00
    @lewis1990 #25 回复类似 如果只是一个树状结构 只需要增加一个 pid 即可。
    sensui7
        28
    sensui7  
       2018-03-04 23:00:25 +08:00
    1. 关系型数据库, 每发布一篇文章, 新建一条评论记录存储在评论表里. 每条记录包含一个文章 id, 这样文章和评论就关联了起来.

    2. nosql 数据库,

    1) 每篇文章嵌入一个子文档数组, 数组中每个子文档是一条评论. 优点是取文章时可以直接取得它的全部评论, 缺点是容易撑爆文档容量限制.
    2) 每篇文章包含一个数组, 数组存储的是评论 id. 评论在另一个表中存储.
    3) 每篇文章包含一个数组, 数组存储的是 bucket id, 每个 bucket 文档存储评论, bucket 大小按照分页设置, 一个 bucket 就是一页评论.
    4) 每条评论包含一个文章 id, 效果和关系型数据库一样.

    以上就是 1: N 数据库的处理方法.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1010 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 21:29 · PVG 05:29 · LAX 13:29 · JFK 16:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.