我正在研究简单的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属于博客的页面,那么我会获取最新帖子并向用户显示。
后者我想扩展页面,所以页面可以是留言板或其他任何东西。 基本上,我需要数据库设计,页面将存储在页面表中,每个页面可以是单独的模块,将以不同的方式呈现。
这是我上面描述的方式吗?还是可以做得更好? 我在这里做错了吗?
答案 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]