CMS数据库设计,模块?

时间:2012-02-29 21:34:34

标签: database database-design

我正在研究简单的PHP CMS系统,我坚持使用数据库设计。

这就是问题所在。

我有表格命名的页面,它包含我可以添加的所有页面以及有关此页面的信息,如page_url,page_order等。

现在......每个页面都可以是可以容纳某些HTML内容的网页。但它也可以是博客或其他任何东西。只能有一个博客页面。另一方面,博客可以有博客文章和博客类别。

简单地说,我有一个页面表,代表我可以创建的所有页面。 每个页面都可以不同,可以是网页,博客模块,留言板,联系人页面。

每个页面都有不同的用途。

所以问题是如何设计呢?

现在这可能还不清楚,但这是我目前的设计,所以也许更容易理解我想要实现的目标:

pages
    page_id
    page_name
    page_url
    ...

webpages
    webpage_id
    page_id
    webpage_content
    webpage_date_created
    ...

blogs
    blog_id
    page_id
    ...

blog_posts
    blog_post_id
    blog_post_title
    blog_post_content
    ...

blog_categories
    blog_category_id
    blog_category_name
    blog_category_url
    ...

所以,我有包含所有页面的页面表,但这些页面可以是网页(简单的“静态”网页),也可以是博客,博客可以有帖子,类别等......

所以现在,如果我来到id属于webpages模板的页面,我会搜索我需要的内容和内容,并将其交还给控制器和视图。

如果我来到id属于博客的页面,那么我会获取最新帖子并向用户显示。

后者我想扩展页面,所以页面可以是留言板或其他任何东西。 基本上,我需要数据库设计,页面将存储在页面表中,每个页面可以是单独的模块,将以不同的方式呈现。

这是我上面描述的方式吗?还是可以做得更好? 我在这里做错了吗?

2 个答案:

答案 0 :(得分:1)

这里似乎没有任何根本性的错误 - 你正在使用面向对象的约定,我不能鼓励它。如果我理解,您的所有页面都将列在PAGES表中,然后通过PAGE_ID连接到相应的类别?

如果您愿意,可以继续添加不同的页面类型,并保留网站上所有页面的单个列表。

我要添加的唯一内容可能是您的网页表格中的“类型”列。即使您能够通过在其他(博客和网页)表上运行page_id查询来确定这一点,如果您对真正的扩展和收集能够感兴趣,它可能会让您的生活变得更轻松。从你的应用程序构成快速(25%静态页面等)。

此布局还允许您组合类型(如果博客和网页表中存在page_id),您可以引入一些静态内容,同时也放入动态博客功能。

对我来说很好看:))

答案 1 :(得分:0)

使用“type”列指定页面包含的内容类型。然后使用联接表将您的内容与您的网页相关联。像:

pages
->id [123]
->type ['blog']

blogs
->id [123]
->title ['My Blog']

pages_blogs
->id [123]
->page_id [123]
->blog_id [123]