我有一个圣经项目,我需要专家的一些输入,以确定哪个更快,更有效地在页面中显示结果。
我的圣经表目前仅包含3个字段? id,verse_code和verse_content。
为了能够显示适当的圣经书和单词(例如创世纪1:1),我正在对verse_code进行切换案例陈述,其中包括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
文本框位于左下角
由于
答案 0 :(得分: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;
在这里使用经文表,您会看到一个book_id字段,用作书籍的foreign key(因此您可以确定它链接到现有书籍),并且您今后可以在查询中使用{{3来自经文的数据以及书籍中的book_name。
然后,您可以使用查询条件进行查找,该条件指定书籍book_id必须是您在经文中找到的书籍,并且您的查询将自动返回正确的书名。
SELECT book_name,chapter,verse,verse_content FROM verses,books WHERE books.book_id = verses.book_id;
join是真正让您掌握数据的优秀SQL概念之一,Jeff Atwood的这个Joins将让您清楚地了解它们对您的意义。我真的建议你调查一下。 :)
作为一个额外的好处,因为你可能不是为了自己的使用而编写这个,所以通过将代码中的可视化数据放入数据库中来抽象它可以让你将这个方面(数据输入和数据更正)移交给其他人可能完全不了解(潜在的)编码。
你是否希望人们必须改变你的源代码,如果你输入错误并称之为Potter而不是Peter,或者为他们提供一个远离代码的良好界面以允许他们将其更改为Peter更安全吗?
它还允许您通过让所有人插入数据而不会相互干扰或使用您的代码来分配更多人的工作。