我有这个表,我敢打赌,在看表,你会知道我的问题已经:)鸡和蛋:数据库设计
content_table
--------------------------------------
| id | title | type | parent_id |
--------------------------------------
| 0 | Root | Page | 0 |
|100 | Home | Page | 1 |
|101 | Main Text |Section| 1 |
|102 | About | Page | 1 |
|301 | Foo | Text | 245 |
|302 | About Us | Text | 246 |
--------------------------------------
paging_table
---------------------------------
| page_id | section_id | rel_id |
---------------------------------
| 0 | 0 | 1 |
| 100 | 101 | 245 |
| 102 | 101 | 246 |
---------------------------------
section_options
----------------------------
| section_id | option_mask |
----------------------------
| 101 | 65535 |
----------------------------
*paging_table.page_id and paging_table.section_id
both have FOREIGN KEYs on content_table.id
section_options.section_id has a FOREIGN KEY on content_table.id
所以基本上我有一个CMS,我想对待一切,内容,无论是页面,页面部分还是页面本身的实际内容。
其次,由于一些网页的部分会比较相似,我决定,我不需要创建多个部分(例如home_main_text,about_main_text,等...)。我只需要创建一个通用部分,并让paging_table
负责其余部分,因为各部分也会有很多显示选项(存储在另一个表中,参考content_table.id
)。如果我要在两行中存储具有非常相似选项的类似部分,那看起来不好吗?
然后我创建了一个root
内容(id = 0
在content_table
)。所有主要页面和部分都将以root
作为其父项。
我现在的问题是,我想要FOREIGN KEY
parent_id
引用rel_id
列。但我有Root
元素担心。我已经觉得我正在对paging_table
的第一行进行破解。我现在感觉到了根内容的鸡和鸡蛋的情况。你认为真正需要根内容吗?通用部分方法如何?我只是想更好地设计这个数据库:),或者可能是CMS的架构整体重新设计,因为我刚刚开始,而且我还没有做很多。
批评非常受欢迎(只是建设性的)。如果有什么模糊的地方,请发表评论,我会尽力澄清它,我只是很难说清我脑海中的想法,如果我只是将源代码发送给我的课程,那真的很麻烦建造。谢谢!
编辑
我编辑的ID的使引用明确
我不明白paging_table的功能,你能解释一下吗?你的设计与子打字(指向内容记录的部分)听起来很好。 – buddhabrot
嗨!那么因为每个部分都是通用的,所以我必须找到一种“混搭”部分和页面的方法。这是否回答? –
好的,我会回答。 – buddhabrot