我有一个条目列表,可以被认为是书中的段落,存储为同一个类的单独对象。这些对象具有'num'属性以及实际文本,因此我知道它们的顺序,以后可以按正确的顺序(1,2,3,...)显示它们。
现在我想更进一步,并能够“记录”书籍的结构,如目录。换句话说,这本书分为章节,每章又分为几个部分。前几段见于第1章第1节,然后是第1节。 2,等等一直到Ch。 n,S.m。我不确定什么是记录这些信息的好方法?我被告知我应该使用SQL数据库,但我不知道从哪里开始。
实施必须允许我在任何时候“快速”确定以下两件事:(1)给定章节和章节#,本节包含哪些段落? (2)给出一个段落#,它的章节是什么?它还必须足够灵活,如果书的结构(深度方面)发生变化(例如,章节分为子章节等),我可以在将来使用相同的平台进行少量编辑。最后,应该能够处理可选的分区(即某些部分有子部分而其他部分没有)。
这适用于iOS应用,我的代码到目前为止用Objective-C编写。
答案 0 :(得分:1)
SQL肯定是一种可能性。如果您遵循这条路线,在灵活性和易于编码之间存在一定的折衷,这会影响可维护性。例如,如果您构建一个固定的结构,比如说有一些额外的级别试图迎合未来,例如:
Book
Chapter
Section
Sub-section
Paragraph
您将拥有带有明确引用的代码,例如section.fk_chapter
,paragraph.fk_subSection
等。这样可以更轻松地进行故障排除和构建查询。但是,如果您想添加sub-paragaphs或子子节,则必须重新编译代码。您可以使用此方法更简单地编写UI,因为您始终知道哪个"级别"你在工作。或者,您可以采用分层方法:
Book
Chapter
Content Item
Content Item
Content Item
....
其中contentItem表具有自引用外键。这具有允许您任意数量级别的相当大的优势。内容项的某些属性可以告诉您名称和"键入"如果需要你的水平。它肯定更灵活,但在实现和UI呈现方面会有一些复杂性。名为contentItem.fk_contentItem
的列引用父级别不会告诉编码器它们在层次结构中的位置。查询将更难写。用户界面必须满足"任何"级别数。但另一方面,这些问题并非不可克服,许多问题已经在这条路上走了过来。
你的问题相当广泛,因此对方法的看法会有所不同,而且上述情况也很普遍。