-2

我有一个圣经项目,我需要专家的一些输入来确定在页面中显示结果时哪个更快、更有效。

我的圣经表目前只包含 3 个字段?id、verse_code 和 verse_content。

为了让我能够在单词中显示适当的圣经书和经文(例如创世记 1:1),我正在对 verse_code 进行 switch-case 语句,其中包括 66 个案例,例如......

select (verse_code)
{
case 1: echo "Genesis";
case 2: echo "Exodus";
...
case 66: echo "Revelation";
}

我可以保持这种方式,或者我可以添加新列book_name并输入每个相应经文的书名。这将相当于 31,103 行。

性能方面,这两种方法之间更快。我应该保留我的案例陈述,我应该输入 31,103 行的书名吗?

测试代码在这里。 http://sandbox.littlegraffyx.com/bible/test.html要使用它,请尝试输入 Gen x:x 其中 x 是章节和诗句以及书的前 3 个字母。样本:Gen 1:1 或 Exo 2:2

文本框位于左下角

谢谢

4

1 回答 1

1

最好的方法是在查询中使用查找表,无论如何您都在往返于数据库,并且对于数据库连接数据,它的设计目的是:

CREATE TABLE verses (verse_id INT PRIMARY KEY AUTO_INCREMENT,book_id INT NOT NULL, chapter INT NOT NULL,verse INT NOT NULL, verse_content TEXT NOT NULL, FOREIGN KEY(book_id) REFERENCES books(book_id)) ENGINE = InnoDB;

CREATE TABLE books(book_id INT PRIMARY KEY AUTO_INCREMENT,book_name VARCHAR(100)) ENGINE = InnoDB;

在 verses 表中,您会看到一个 book_id 字段,该字段用作书籍的外键(因此您确定它链接到现有书籍),并且您以后可以在查询中使用该字段将来自 verses 的数据与来自 book_name 的数据连接在一起图书。

然后,您可以使用指定书 book_id 必须是您在 verses 中找到的查询条件来查找它,并且您的查询将自动返回正确的书名。

 SELECT book_name,chapter,verse,verse_content FROM verses,books WHERE books.book_id = verses.book_id;

联接是真正使您能够掌握数据的伟大 SQL 概念之一,Jeff Atwood 的这篇博客文章将让您清楚地了解它们对您意味着什么。我真的建议你调查一下。:)

作为额外的好处,由于您可能不只是为了自己使用而编写此代码,因此通过将代码放入数据库中来抽象化可视化数据允许您将此方面(数据输入和数据更正)交给其他人可以完全不了解(底层)编码。

如果您打错字并称其为 Potter 而不是 Peter,您是否希望人们必须更改您的源代码,或者为他们提供一个远离您的代码的漂亮界面以允许他们将其更改为 Peter 会更安全吗?

它还允许您通过让他们都插入数据而不相互干扰或干扰您的代码来将工作分配给更多人。

于 2012-06-16T23:02:32.423 回答