【问题标题】:Database design and query数据库设计与查询
【发布时间】:2011-02-18 08:32:36
【问题描述】:

我要求每个主要主题有多个子主题。并且每个子主题都需要能够有 n 个 cmets。

我需要有数据库表来表示这个结构,然后查询它以获取子主题列表,并为每个子主题获取属于它的所有 cmets。我还必须有办法知道我何时到达每个子主题的 cmets 末尾。

有人可以为此提供最佳设计/查询建议吗?

我使用 MySQL。

非常感谢! - 亚历克斯

【问题讨论】:

  • 我感觉我的作业传感器要熄灭了。

标签: sql mysql database architecture


【解决方案1】:

我认为这种数据库设计可能可行:

TOPIC
id
name

TOPIC_HAS_TOPIC
id
parentId
childId

COMMENTS
id
comment
topicId

【讨论】:

    【解决方案2】:

    需要的表格: 话题 子主题(有一个父键指向父主题) 评论(有一个父键指向父子主题)

    然后对于给定的子主题,只需选择具有该子主题键的所有 cmets。

    【讨论】:

      【解决方案3】:

      你可以这样设计:

      |Topic| -1----*- |SubTopic| -1----*- |Comments|
      

      (编辑:星号似乎是斜体,所以请忽略色差)

      即,从主题到子主题的一对多关系以及从子主题到 cmets 的另一个 1-many

      您可以为每个表设置代理主键:

      Create Table Topic (topic_id int auto_increment, primary key(topic_id),...)
      

      Subtopic 的 subtopic_id 和 Comments 的外键等类似。

      获取特定主题的所有 cmets 可能类似于:(假设 Comments 表的文本属性(可能是 TEXT 数据类型?))

      select comment.text from comments
      join suptopic using(subtopic_id)
      join topic using (topic_id)
      where topic_id = 1;
      

      (joininner join 相同,并且 'using' 仅适用于 'join-column' 共享相同名称的情况,否则语法不同)。

      【讨论】:

      • 假设:假设单个子主题仅属于一个主题(否则使用 arex 的架构,您的查询中只会有额外的连接)
      猜你喜欢
      • 2011-01-02
      • 2016-04-21
      • 1970-01-01
      • 1970-01-01
      • 2018-10-28
      • 2012-02-26
      • 2020-05-14
      • 1970-01-01
      相关资源
      最近更新 更多