首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何针对单个父表设计多个子表?

如何针对单个父表设计多个子表?
EN

Stack Overflow用户
提问于 2012-05-30 21:18:42
回答 2查看 3.1K关注 0票数 2

如果有人能告诉我如何正确地处理这个问题,我将不胜感激:

  • 我有一个带有主键master_id的父表。
  • 我有五个与master_id关联的子表,它们以1到n的关系记录语义上不同类型的数据(并且不允许抽象)。
  • 每个子表中唯一常见的字段是master-id (外键)、created_by (user_id)、created_time (时间戳)。

其目的是按时间顺序在网页上发布与主id关联的每个子行(想象一个论坛帖子样式显示),PHP构建每个"post“(即行)的方式略有不同,取决于子表(以及可用的数据字段)。

我是否正确地认为,无论表结构如何(排序最好在PHP中完成),都没有简单的方法来查询这个问题吗?垂直地将3个公共字段划分成一个与table字段相结合的表有什么好处吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-30 22:32:57

这是一个很难解决的问题,这是我自己做过的。不幸的是,我没有一个好的答案。您可以使用联合和各种类型的连接,但是您可能会严重影响数据库的性能。另外,你还会遇到这样的问题,比如说,你想要最新的30个年表条目。您必须查询每个子表中的30个条目(总共可能有150个条目),并在代码中对它们进行排序,因为您不知道哪个子表有最新的30个条目。150排就可以拉30下了。

老实说,我发现实现这样一件事的最好方法是有一个表,可能是你的主表,有专门的列来显示您想从子表中显示的内容。例如,在您的主表中有类似于master_idcreated_bycreated_timenotification_text的列(例如,如果您试图实现类似Facebook的时间线)。您可以在子表上设置触发器,以便在将数据插入其中一个表时,它也会自动填充主表中的数据。然后,当您显示时间线时,您只需查询主表,而完全不需要处理子表。

您的模式将类似于:

代码语言:javascript
复制
Table master
- master_id
- created_by
- created_time
- notification_text

Table child1
- id
- master_id
- data1 (used to generate notification_text in master)

Table child2
- id
- master_id
- data21 (collectively used to generate notification_text in master)
- data22 (collectively used to generate notification_text in master)
- data23 (collectively used to generate notification_text in master)

...
票数 2
EN

Stack Overflow用户

发布于 2012-05-30 21:28:32

你做明星模特怎么样?它通常用于创建数据仓库,但是您可以尝试在解决方案中使用类似的东西。如果您不熟悉星型模型,您可以看到更多的这里

希望能帮上忙。

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

https://stackoverflow.com/questions/10824428

复制
相关文章

相似问题

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