【问题标题】:CMS in PHP - Database designPHP 中的 CMS - 数据库设计
【发布时间】:2013-02-09 13:48:19
【问题描述】:

我正在开始 Web 开发并开始使用 PHP 和 MySQL。我正在尝试制作一个类似于技术博客的 CMS,并坚持数据库设计。每个帖子可以是以下任何一种类型。

  1. 富文本 - 单部分
  2. 富文本 - 多个部分
  3. 视频链接 - 单部分
  4. 视频链接 - 多个部分
  5. 附件 - 单部分
  6. 附件 - 多个部分

(附件可以是pdf、doc、ppt)

每个帖子都在部分之下。这些部分存储在一个表中。部分的示例是

教程 - 允许所有类型 代码 sn-p - 只允许 1 提示或技巧 - 只允许 1,2,3,4 新闻更新 - 只允许 1 和 3 审核 - 仅允许 1 和 3 项


所以我的问题是

  1. 如何存储和区分单篇文章和多篇文章?
  2. 存储附件的可行/最佳方式是什么?
  3. 如何关联部分和帖子?即,如何知道/存储特定部分可以支持帖子类型(全部、仅 1、仅 1 和 2 等)。

编辑: 通过单一方式,我的意思是 1 个帖子只有 1 个部分,而通过多部分,我的意思是 1 个帖子可以有多个部分

【问题讨论】:

  • 多部分是什么意思?您是在谈论将多个帖子合并为一个,还是这只是段落的花哨词?
  • 您的问题太宽泛了。你试过什么?
  • 如果它确实回答了您的问题,请考虑接受一个答案(点击左侧的勾号)

标签: php mysql database-design content-management-system


【解决方案1】:
  1. 我猜“single”是指一篇文章与一个部分相关,多部分是指几篇文章与一个部分相关?

    db-design 可能是...

    table section
    ---------------
    id (int, a-i)
    type (int) 1=tutorial, 2=code-snippet etc.
    name (varchar)
    ...
    
    table post
    ---------------
    id (int, a-i)
    section_id (int) key to section.id
    ordering (int) if multi for controlling which part is first, second etc. 
    type (int) 1=rich-text, 2=video, 3=attachment  <---- drop single/multi discrimination here
    single (int) 1=yes, 2=no <---- and put it here instead
    content (varchar) --> see below
    description (varchar) of this post
    

    注意:单个是一个帖子,多个帖子链接到同一部分。

  2. 附件的存储位置: 在您的 Web 服务器的文件系统中,数据库在 table.content 中保存文件名。 小帖子类型(例如链接)可以直接存储在table.content --> 保持你的数据库精益和执行

  3. 相关部分和帖子: 通过post.section_id。像这样,您可以将 1 个或多个帖子链接到一个部分。使用post.ordering 将它们按正确的顺序排列。

    section
    -------------------------- 
    id     | 1
    name   | "How to build a CMS"
    type   | 1 (tutorial) 
    
    post
    --------------------------
    id         | 1 
    section_id | 1
    ordering   | 0
    type       | 1 (rich-text)
    content    | "/files/130224_1_1_cms.rtf"
    ... 
    
    id         | 2
    section_id | 1
    ordering   | 1
    type       | 3 (video link)
    content    | "http://www.youtube.com/hgstersh/showid=23jfjr&blabla"
    ...
    

    哪个section.type可以拥有哪个post.types?

    • 在创建新部分时,设置section.type(例如表单中的下拉列表)
    • 在为此部分创建新帖子时,post-type 的下拉列表仅提供基于section.type 的允许类型,这是在带有if...switch...case 的php 脚本中完成的。

【讨论】:

    【解决方案2】:

    如果一个帖子可以有多个图像、帖子、链接,这是一对多的关系,典型的架构是:

    POST: id, title, ...
    RICHTEXT: id, post_id, content
    LINK: id, post_id, url
    

    如果您需要多对多关系,例如,一个故事可以有多个链接,但同一个链接可以位于多个故事中:

    POST: id, title, ...
    LINK: id, url
    POSTS_LINKS: id, post_id, link_id
    

    还可以快速查看其他 popular platforms 的架构

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-05
      • 2011-03-18
      • 2013-09-11
      • 2012-03-27
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多