首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >博客架构设计

博客架构设计
EN

Stack Overflow用户
提问于 2011-07-15 01:27:09
回答 2查看 498关注 0票数 3

我正在自学rails,并想建立一个类似tumblr的博客。它将有几种不同的帖子类型,如书面文本帖子、照片帖子、音频帖子和视频帖子。

我最初的想法是为每种类型的帖子建立不同的模型,因为每种类型的帖子都会有不同的规则。然而,我还在学习,不知道我不知道什么,所以也许有更好的方法去做事情(也许只有一个帖子模型,一个帖子类型表?)。

任何反馈都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-15 01:35:22

也许一个好的关系数据库和面向对象的设计应该是拥有一个主帖子模型,它可能与所有类型的帖子共享大部分相同的属性和行为。这甚至可以作为你的“文本”类型的帖子。

这也可以简化与帖子的关系(例如。“用户有许多帖子”与“用户有许多文本帖子和/或视频帖子和/或等”)。

然后有一种" attachments“连接表,它决定了附件的类型(因此每个帖子可以有多个附件):

代码语言:javascript
复制
CREATE TABLE attachments (post_id, media_type, media_id)

然后为每种类型建立一个表和模型,用于特定的行为和媒体类型的处理程序。

代码语言:javascript
复制
CREATE TABLE audios (id, transcription, storage);
CREATE TABLE videos (id, location, format, storage);

不过,这可能需要某种多态关系,这可能是一个有争议的DB设计……您将需要视图和触发器来轻松查询和维护完整性……但是Rails可以很好地处理它。

post模型会有

代码语言:javascript
复制
has_many :attachments

和附件会有

代码语言:javascript
复制
belongs_to :post
belongs_to :media, :polymorphic => true

每种媒体模型都会有

代码语言:javascript
复制
has_one :attachment, :as => :media

然后,您可以通过访问媒体

代码语言:javascript
复制
post.attachments[0].media

如果每个帖子只需要一种类型的媒体,则可以跳过附件表并将属性与帖子表合并

对不起,我一直在编辑,我一直在想更多的事情要说:)

票数 4
EN

Stack Overflow用户

发布于 2011-07-15 01:39:10

这里有几个可行的选择。

首先,您可以只创建一个包含text_contentvideo_linkphoto_link等列的模型。

然后,在您的视图中,您可以根据哪些属性具有值,以不同的外观向用户呈现帖子的视图(可能使用部分)。

第二种选择是制作一个更小的Post表,它只包含关键信息,并使用一系列与其他项的“has_one”关系。

我认为第二种方法的唯一优点是,您的DB表将更小,因为您不必一遍又一遍地表示空单元格。除非你担心一些巨大的伸缩性问题,否则我会选择第一个选项。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6697432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档