【问题标题】:Database design for Content Management System内容管理系统的数据库设计
【发布时间】:2020-02-15 06:30:12
【问题描述】:

在设计内容管理系统时,我希望一个特定的表包含某些数据,这些数据将显示在多个页面(但不是所有页面)中。

处理这种情况的最佳方法是什么?

表格

    • pageID - 主键自动
    • 页面名称 varchar 50
    • pagetitle varchar 50
    • mainimageURL varchar 200
  • 主题
    • themeID - 主键自动
    • 他们的名字 - varchar 50
    • imageURL - varchar 200
    • 主题定位 - pageID 数组。

主题表将包含一个主题列表,每个主题都将显示在上面列表中的特定页面中,但不一定是全部。

示例表

页面

pageID - pagename - pagetitle - mainimage
1 - 孩子 - 儿童派对 - 一些图片
2 - 公司 - 公司活动 - 一些图片
3 - 成人 - 成人派对 - 一些图片

主题

themeID - 主题名称 - 主图像 - 链接图像 - 主题位置 2 比萨 imageURL - imageURL 1,3
3 个奴才 imageURL - imageURK 1,2,3
4 彩虹 imageURL - imageURL 1

【问题讨论】:

  • 我认为最好将themeid 存储在pages 表中。并从themes 表中删除themelocation。因为看起来一页最多有一个主题。
  • 我会这样做,但每个页面会包含多个主题,每个主题可能会出现在多个页面中。

标签: database database-design


【解决方案1】:

如果每个页面包含多个主题,并且每个主题可能出现在多个页面中,那么您说的是多对多(或n:m)关系。

这通常通过引入包含链接的第三个表(通常称为junction table交叉链接表)来解决。

因此,您将创建一个名为 PageThemes 的表,其中列出了页面的所有主题。此表包含一个页面 ID 和一个主题 ID。虽然每个页面 ID 可以被多次引用,每个主题 ID 也可以被引用,这两个字段的组合可以是唯一的,因为表中的每一行代表页面和主题之间的一个链接,链接相同是没有意义的主题到同一页面两次。

此表替换了themeLocations 中以逗号分隔的页面 ID 列表。

【讨论】:

  • 我明白了……这张桌子最终会变成类似的东西吗?
    pageID - themeID
    1 1, 1, 2, 1, 5, 2,3, 2,2 ,2,5, 2,4, 3, 1 ...?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
  • 1970-01-01
  • 2014-05-17
相关资源
最近更新 更多