PHP中的CMS - 数据库设计

时间:2013-02-24 07:33:58

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

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

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

  7. (附件可以是pdf,doc,ppt)

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

    教程 - 允许所有类型 代码段 - 仅允许1 提示或黑客 - 只允许1,2,3,4 新闻更新 - 仅允许1和3 审核 - 仅允许1和3


    所以我的问题是

    1. 如何存储和区分单个和多个帖子?
    2. 存储附件的可行/最佳方式是什么?
    3. 如何关联部分和帖子? ie。,如何知道/存储特定部分可以支持帖子类型(所有,只有1,只有1和2等)。
    4. 编辑: 通过单一手段,我的意思是1个帖子只有1个部分,而我的意思是1个帖子可以有几个部分

2 个答案:

答案 0 :(得分:0)

  1. 我想用"单身"你的意思是一个帖子与一个部分相关,多部分意味着几个帖子与一个部分相关吗?

    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服务器的文件系统中,db保存文件名table.content。 小型帖子(例如链接)可以直接存储在table.content中 - &GT;保持您的数据库精益和执行

  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.type

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

答案 1 :(得分:0)

如果帖子可以包含多个图片,帖子,一对多关系的链接以及典型架构:

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

的架构