我该如何构建这个数据库?

时间:2011-07-26 17:53:47

标签: mysql database-design

我正在为一个网站写一些书籍,其中的内容将通过数据库(MySQL)访问并显示在幻灯片上(使用PHP和JQuery)。这里的幻灯片是为该特定幻灯片输出的一大块HTML数据。

现在我想要实现的是一些Powerpoint-esque技术,其中段落和项目符号点被添加到幻灯片中,例如:

滑动一个:

<p>Lorem impsum...</p>

滑动二:

<p>Lorem impsum...</p>
<p>Dolor sit amet...</p>

换句话说,由于大多数幻灯片包含其他幻灯片中已有的文本,因此会有大量冗余信息。那么为此构建数据库是否有一种相当简单的方法,还是应该保存每张幻灯片的全文?

我现在的结构是:

books
  id
  name

chapters
  bookid references books.id
  chapterno
  chaptername

sections
  bookid references chapters.bookid
  chapterno references chapters.chapterno
  sectionno
  sectionid references sectiontexts.id

sectiontexts
  id
  text

例如,其中一个问题是,如果说章节有10张幻灯片而我删除幻灯片3,那么我将不得不更改4-10节的章节编号。

2 个答案:

答案 0 :(得分:1)

我会保存每张幻灯片的全文。用户在PowerPoint演示文稿中修改以前的内容后续幻灯片是一种相当普遍的现象。同样,存储每张幻灯片所需的数据量实际上非常小,因为您正在处理文本数据,并且尺寸增加的幅度非常小,以至于在与复杂性增加时相比并不特别重要。幻灯片到上一张幻灯片的关联设计。为每张幻灯片添加全文。

答案 1 :(得分:1)

如果希望能够在一个地方对一大块文本进行修正并且在使用块的任何地方出现修正,那么你应该将这些块存储为单独的项目并在它们的主体中引用它们。它们将出现的项目,在显示/渲染时将引用的项目放入正文中。

对于要删除的部分编号,只需存储一个十进制值(2.0,2.5,3.0),当排序时,它会生成项目的显示顺序,但会即时计算“显示数量”。这样,间隙无关紧要,您可以轻松插入一个部分,例如在4.0节和5.0节之间插入的部分将给出4.5,在4.0和4.5之间插入的另一部分将给出4.25,依此类推。