如果有人能告诉我采用这种方法的正确方法,我将不胜感激:
master_id
。master-id
(外键),created_by
(user_id),created_time
(时间戳)。目的是在网页上按时间顺序发布与主ID相关联的每个子行(想象一个论坛帖子样式显示),PHP构建每个“帖子”(即行)根据孩子的不同而略有不同表(以及因此可用的数据字段)。
我是否正确地认为无论表结构如何都没有简单的方法来查询(并且最好在PHP中进行排序)?将3个公共字段垂直分区为单个表并结合table
字段是否有任何优势?
答案 0 :(得分:2)
这是一个非常难以解决的问题,我自己也在研究过。不幸的是,我没有一个好的答案。您可以使用UNION和各种类型的JOIN,但是您可能会严重破坏数据库的性能。另外,你会遇到类似的问题,比如你想要最近的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)
...
答案 1 :(得分:0)
你做明星模特怎么样?它通常用于创建数据仓库,但您可以尝试在解决方案中使用类似的东西。如果您不熟悉星型模型,可以看到更多here。
希望它有所帮助。