我正在我的应用程序中创建一个帖子库(就像facebook帖子一样(,每个帖子都可以有多个相关标签,用户也可以通过标签查看帖子,所以我有两个表:-
"posts_has_tags"
post_id -> tag_id
"tag_has_posts"
tag_id -> post_id
开发人员可以使用这样的库查询帖子和标签->
Post $post = new Post($postId)
Tag $tag = new Tag($tagId)
然后我想添加将标签附加到post的函数,但现在我很困惑,因为我可以创建两个单独的函数,一个添加标签到post(在post类中(,另一个添加post到标签(在tag类中(例如:-第一个:-
$post->addTags([$tag1, $tag2])
then
for (i = 0; i < numOfTags; i++){
$tag{i}->addPost($post)
}
因此,在这里,开发人员(库用户(将有两个功能,他们必须手动添加要发布的标签,还必须将该帖子添加到标签,所以如果第二个操作失败(如果这些表在不同的机器上(,他们可以回滚第一个操作,
或
我可以在Post类中提供一个单独的函数,它将自动完成所有的工作,例如:-
$post->addTags([$tag1, $tag2...])
那么,哪种方法更好呢?,假设我的数据库是按函数划分的(意味着post_has_tags和tag_has_posts表可以在不同的机器上(,所以通过第一种方法,库用户可以在应用程序级别创建分布式事务,如果第二台机器失败,我们可以通过removeTags((函数回滚第一个操作,在第二种情况下,这应该在库级别完成,
我想知道哪一个更好?,同样适用于用户追随者,在那里你可以看到追随者和追随者,这些东西也可以在不同的机器上,很抱歉英语不好,谢谢:(
这通常是用一个表来完成的,一个表可能有。。。
table: postAssciatedTags
columns: postID,
tagID,
taggedDate (optional)
主键为postID和tagID(因为同一个标签只能标记一次帖子(。
所以你只添加了一个双向的记录,你可以看到一个帖子有哪些标签,或者哪些帖子用某个标签标记。