我正在学习并尝试创建一个站点,但我对数据模型有点困惑。我的网站类似于Github,因为你可以跟踪人和复制/共享东西(类似于分叉/拉请求)。如何创建数据模型来存储此数据?
基本上,我写了一篇文章,而这篇文章是与我相关联的。然后你来“叉”我的文章,我要复印一份吗?或者只是一个链接?编辑完您的版本后,您向我发送一个请求,要求将我们的内容合并在一起(我不想覆盖数据,但不确定如何以捕获差异的方式进行)。为了让事情对我来说更糟,我希望在编辑时进行版本控制,这使得在对分叉数据进行版本控制时很复杂。
我不知道从哪里开始……我不需要答案,但是关于如何建模这个分叉/合并交互的任何建议都是很好的。我还没有决定是否要使用redis或mysql,但是如果我可以将逻辑应用到其中一个,一般的答案是可以的。
最佳答案
创建两个模型:文章和文章修订。用户有许多与他关联的文章(文章的所有者),并且文章有许多修订:
文章(id,user_id,current_revision_id,created_at)有许多文章修订
ArticleRevision(ID,Article_ID,Title,Body,Created_AT,Parent_Revision_ID)属于Article,属于ArticleRevision,有许多ArticleRevision
文章的当前版本由current_revision_id
字段确定。修订有一个父修订-这是一个修订,它是从它开始的。
当有人叉文章时:
复制文章
克隆文章的最新版本,并可以选择重置新创建版本的父版本(这样历史记录将为空)。
设置新创建文章的所有者和当前修订
关于mysql - Github喜欢数据模式吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11090024/