【问题标题】:How should I structure this database?我应该如何构建这个数据库?
【发布时间】:2011-10-13 15:23:39
【问题描述】:

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

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

幻灯片一:

<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 节的节号。

【问题讨论】:

    标签: mysql database-design


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我会保存每张幻灯片的全文。用户在 PowerPoint 演示文稿中使用修改先前内容的后续幻灯片是相当常见的情况。同样,存储每张幻灯片所需的数据量确实非常少,因为您正在处理文本数据,而且大小的增加是如此之小,以至于与幻灯片到上一张幻灯片的关联设计。为每张幻灯片提供全文。

      【讨论】:

        猜你喜欢
        • 2014-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-18
        • 2021-06-05
        相关资源
        最近更新 更多