什么';用SQL存储圣经的最佳方法是什么?

什么';用SQL存储圣经的最佳方法是什么?,sql,mysql,database-design,Sql,Mysql,Database Design,我要找的是表名与相应字段/类型的细分 我想储存的圣经将是英文的,需要支持以下内容: 书 章节 章节标题(可在章节内和章节之间显示) 小写文字 红字文本 诗数 脚注(可以在诗句和章节标题中显示)(可以选择引用另一个诗句) 交叉引用(本质上是一个脚注,仅引用另一节,不添加任何注释) 还有什么我忘了的吗 而不是重新创建轮子,你可以考虑使用一个“圣经SDK”,例如以一个开放的、自定义的二进制格式存储文本、格式化、韵文数字等。 我想他们有你列出的所有东西,除了交叉引用。马克·拉沙科夫的答案可能最适合你

我要找的是表名与相应字段/类型的细分

我想储存的圣经将是英文的,需要支持以下内容:

  • 章节
  • 章节标题(可在章节内和章节之间显示)
  • 小写文字
  • 红字文本
  • 诗数
  • 脚注(可以在诗句和章节标题中显示)(可以选择引用另一个诗句)
  • 交叉引用(本质上是一个脚注,仅引用另一节,不添加任何注释)
  • 还有什么我忘了的吗

而不是重新创建轮子,你可以考虑使用一个“圣经SDK”,例如以一个开放的、自定义的二进制格式存储文本、格式化、韵文数字等。


我想他们有你列出的所有东西,除了交叉引用。

马克·拉沙科夫的答案可能最适合你的具体需要。但是,如果需要存储内容中包含数据的内容,或者如果需要存储关于内容的数据,通常使用a。您可以构建自己的(WernerCD的答案中有一个表结构)或使用。此处的列表显示了所使用的各种技术(此列表中约30种使用MySQL)

WernerCD的所有答案,但将verseText存储为xml,以便您可以添加格式标记,如
,如红色文本,并使用标记在应用程序中对其进行格式设置

以下是另一个集合/示例:

这里您将看到SQL、XML、CSV和JSON。特别值得注意的是交叉引用表(非常广泛和惊人)和用于快速查询的简单verse id系统


编辑:请注意,表的ID是书本章节韵文组合,总是唯一的

我还发现它包含了几个mysql格式的圣经翻译。

SQL是存储这些内容的最佳方式。考虑到您的要求,我们可以将其分为两大部分

  • 依赖于单个版本的信息

    • 小型股
    • 红字印刷
  • 不依赖于单个版本的信息

    • 书、章节、诗句编号
    • 章节标题
    • 脚注(????????)
    • 交叉引用
    • 评论
  • 出于各种原因,我更喜欢将整个圣经项目存储在一个表中,是的,称之为
    bible

    这是我的屏幕,我在一张桌子里储存了将近15个版本的圣经。幸运的是,不同的版本名只保留为列宽。当您将来添加更多版本时,您的表会水平增长,这是正常的,因此行数保持不变(31102)。此外,我将要求您认识到将(‘书、章、诗’的组合作为主键的便利性,因为在大多数情况下,这是查找方式

    这就是我推荐的表结构

    CREATE TABLE IF NOT EXISTS `bible` (
      `id` int(11) NOT NULL AUTO_INCREMENT, --Global unique number or verse
      `book` varchar(25) NOT NULL,  --Book, chapter, verse is the combined primary key
      `chapter` int(11) NOT NULL, 
      `verse` int(11) NOT NULL,
      `section_title` varchar(250)  NOT NULL, -- Section title, A section starts from this verse and spans across following verses until it finds a non-empty next section_title
      `foot_note` varchar(1000)  NOT NULL,  -- Store foot notes here
      `cross_reference` int(11) NOT NULL, -- Integer/Array of integers, Just store `id`s of related verses 
      `commentary` text  NOT NULL, -- Commentary, Keep adding more columns based on commentaries by difference authors
      `AMP` text  NOT NULL, -- Keep, keep, keep adding columns and good luck with future expansion
      `ASV` text  NOT NULL,
      `BENG` text  NOT NULL,
      `CEV` text  NOT NULL,
      PRIMARY KEY (`book`,`chapter`,`verse`),
      KEY `id` (`id`)
    ) 
    
    哦,小大写字母和红色字母呢

    小大写字母和红色字母可以使用HTML或适当的格式存储在版本列中。在界面中,您可以根据用户的选择将其去除,无论他需要红字还是小写字母

    作为参考,您可以从下面下载SQLs并以您的方式进行自定义


    此存储库包含sql中给出的整本圣经


    水平扩展数据库效率不高,因为可能会有非常大的表和复杂的更新。所以id,书,章节,诗句,V1,V2,V3,V4。。。Vn似乎只是把问题当作一个电子表格来看待,而不是利用DB提供的功能

    参考文献是静态的(书、章、节),因此它们可以用id填充在一个表中,这样你就有了整个圣经的框架。verse内容可能有数百个版本,因此最好将其存储在自己的表中,并使用外键链接以识别引用。结构将是主id、外来id、版本、内容

    现在,内容只是根据需要填充,不需要有数千个空字段,将来每次添加新版本时,您都必须返回并填充这些字段,或者需要扩展表并回填所有现有数据。只要在你得到它们的时候把它们填上,我想如果你自己建造的话,效果会更好

    这也是有意义的,因为一些版本只有NT或一些他们认为后来添加的诗句不可用,所以不需要有空字段,您只需要有数据,它链接到诗句引用。“版本”也可以是外键,用于识别版本中的更多信息,如发布日期或长/短名称(即“NIV”,“新国际版本”),当使用多个版本的翻译(如1984年NIV与2011年NIV)时,这也很有效。两者都可以标识为“NIV”,但内容不同,因此版本id可以将另一个表与其使用的版本的扩展信息链接起来。一旦该数据输入并正确链接,您就可以按照自己的意愿显示它,例如,将发布日期/简短版本名称组合成“NIV1984”之类的名称,或者为显示名称单独设置一列

    我不确定如何显示红色字母或脚注,我知道像biblegateway这样的网站有一个切换开关,所以有这样的选项排序很好。对于红色字母,这可能是一个特殊的静态标识符,直接在韵文内容中,稍后作为CSS标识符解析出来。它也可以是它自己的外部表,但因为它太小,所以使用分隔符非常容易。这实际上取决于您使用数据的目的,如果您想查询红色字母,那么最好将其作为外部表(快速),而不是在数据库中搜索分隔符(慢速)