首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类似类对象的推荐MySQL数据模型

类似类对象的推荐MySQL数据模型
EN

Stack Overflow用户
提问于 2012-07-13 15:40:52
回答 3查看 126关注 0票数 2

我们将创建一个MySQL数据库,以反映以下PHP类:

  • 内容
  • 文章扩展内容
  • Post扩展内容
  • ..。

会有与内容相关的模型,如评论、忽略等等。

这里的问题是使用哪种数据模型。

1)每个模型一张表

2)一个大的内容表(所有类属性都作为列),加上其他模型的单个表。我相信这叫做单表继承。

3)一个包含公共字段的大内容表,或者只有我们通常在(索引)上搜索的字段,再加上一个包含其余属性的大型内容数据表。

4)另一种方式?

我们希望能够对内容进行查询,并获得最近的、基于位置的或某种方式过滤的内容,而不管它是哪种内容类型(子类)。因此,解决方案1可能是不可能的。

这个系统应该是快速和可扩展的。解决这个问题最好的办法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-13 16:30:56

我写了一篇关于这个话题的博文,你可能会发现它很有帮助:http://jasonswett.net/blog/composition-a-better-alternative-to-orm-inheritance/

首先,我建议您将表称为content_item或其他东西,而不是content。原因是我认为表名应该与它所代表的事物的名称相匹配。有关这方面的详细信息,请参见我的另一篇博文

因此,您可能有一个名为content_item的表、一个名为article的表和一个名为post的表。content_item将有titleslug等列--每个内容项所包含的所有内容,无论是帖子、文章还是其他内容。然后article将有一个content_item_id,然后是任何特定于文章的内容,但只包含特定于文章的内容。对于每一篇文章,您都有一个content_item记录,然后是一个附加到该content_item记录的article记录。

这将使您能够查询content_item并获得包含所有内容类型的结果。

我在过去已经成功地实现了这种解决方案。(我也尝试过不同的方法,但不太喜欢它们。)

票数 1
EN

Stack Overflow用户

发布于 2012-07-13 15:48:52

如果它们是非常相似的对象,我会使用选项3..。la drupals节点概念或当前“post”的wordPress概念

票数 0
EN

Stack Overflow用户

发布于 2012-07-13 17:05:56

也许可以试试这样的东西。您对post与扩展内容的文章的需求可能有所不同,但与内容-> post (或文章)不同的是,为什么不添加灵活性以在任何内容中混合/匹配内容。如果您不需要/希望这样做,那么省略article_content表和post_content表,只需向每个post表和文章表分别添加一个外键content_id INT NULL。

如果不存在内容,则创建表(id INT NULL AUTO_INCREMENT,title VARCHAR(32) NULL,description VARCHAR(255) NULL,正文文本,已发布日期时间NULL,更新日期时间NULL,owner_id INT (1)默认'1',状态TINYINT(1)默认‘1’,主键(id),索引idx_content_status (状态));

如果不存在项目,则创建表(id INT非空AUTO_INCREMENT,title VARCHAR(32) NULL,摘录VARCHAR(255) NULL,url_slug VARCHAR(64) NULL,author_id INT NULL,已发布日期时间NULL,更新日期时间NULL,状态TINYINT(1)默认'1',sort_order INT默认值'1',主键(id),唯一索引idx_article_slug(url_slug),索引idx_article_search(标题,已发布,状态,sort_order));

创建表如果不存在post (id INT NULL AUTO_INCREMENT,标题VARCHAR(32) NULL,注释VARCHAR(128) NULL,author_id INT NULL,已发布日期时间NULL,更新日期时间NULL,状态TINYINT(1)默认'1',主键(id));

如果不存在标签,则创建表(id INT NOT NULL AUTO_INCREMENT,标记VARCHAR(24) NOT NULL,主键(id));

如果不存在article_content,则创建表(article_id INT NULL,content_id INT NULL,状态TINYINT(1)默认'1',sort_order INT默认'1',索引idx_article_content_search(article_id,content_id,status,sort_order));

如果不存在post_content,则创建表(post_id INT NULL,content_id INT NULL,状态TINYINT(1)默认'1',sort_order INT默认'1',索引idx_post_content_search(post_id,content_id,status,sort_order));

创建表,如果不存在article_tags (article_id INT NULL,tag_id INT NULL,索引idx_article_tag_search(article_id,tag_id));

创建表,如果不存在post_tags (post_id INT NULL,tag_id INT NULL,索引idx_post_tag_search(post_id,tag_id));

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

https://stackoverflow.com/questions/11473791

复制
相关文章

相似问题

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