如果有人能告诉我正确的做法,我将不胜感激:
我有一个父表,主键master_id
。
我有五个子表与master_id相关联,在1到n的关系中,记录语义上不同类型的数据(并且不适合抽象)
每个子表中的唯一公共字段是master-id
(外键)、created_by
(用户id)、created_time
(时间戳)。
其目的是按时间顺序在网页上发布与主ID相关联的每一个子行(想象一下论坛帖子样式的显示),php根据子表(以及可用的数据字段)构建每一个“帖子”(即行)略有不同。
我是不是认为无论表结构如何,都没有简单的查询方法(而且排序最好在php中完成)?将3个公共字段垂直分割成一个单独的表和一个table
字段有什么好处吗?
最佳答案
这是一个很难解决的问题,一个我自己努力解决的问题。不幸的是,我没有一个好的答案。您可以使用联合和各种类型的连接,但可能会严重影响数据库的性能。另外,你会遇到一些问题,比如说,你想要最近30个按时间顺序排列的条目。您必须查询每个子表中的30个条目(可能总共有150个条目),并在代码中对它们进行排序,因为您不知道哪个子表有最近的30个条目。150排只拉30排,呜呜。
老实说,我发现实现这一点的最好方法是有一个表,可能是主表,有专门用于显示子表中的内容的列。例如,在主表中有类似于、master_id
、created_by
、created_time
和notification_text
的列(例如,如果您试图实现类似于facebook的时间线)。您可以在子表上设置触发器,以便在向其中一个子表插入数据时,它也会自动填充主表中的数据。然后在显示时间线时,只需查询主表而不必考虑子表。
您的架构将类似于:
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)
...
关于mysql - 如何针对单个父表设计多个子表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10824428/