2012-02-11 40 views
-2

我有2个问题应该如何设计我的SQL(SQLite3)数据库。我使用我的数据库的方式是这样的:改进MySQL数据库设计

我有一个形容词(或任何字真的)&我需要将它解析为它的名词形式。所以对于“快乐”我需要解决这个词来“高兴”(名词&其通用形式)。对于“饥饿”我要解决这个问题,以“饥饿”

Q1:我的大部分SQL查询将涉及自己的搜索名词表中特定的字(行)。 哪个SQL表格设计最适合我的需求&在搜索/查找速度方面更有效率?

CREATE TABLE NounTable (u_id int PRIMARY KEY, u_word varchar, u_noun varchar); 
// OR 
CREATE TABLE NounTable (u_word varchar PRIMARY KEY, u_noun varchar); 

// The majority of my queries will be searching according to the word column 
SELECT u_noun FROM NounTable WHERE u_word="hungrier"; 

Q2:如果我有每行一个唯一的整数ID,当我添加一个新行我需要找到一个唯一的整数ID那不是已经采取的另一行。在我的情况下,每行将有一个id以升序排列,因此对于row1,id = 2,对于行2 = 2 .... row n = n。

在过去添加一行我首先找到最大的唯一ID然后加1到它然后创建新的行。但我曾经听说有一个SQL变量,我认为这叫做自动编号,它会自动执行此操作,这是真的吗?即,它会自动递增。那么我应该使用它,还是建议我坚持把id作为一个整数?

CREATE TABLE NounTable (u_id int PRIMARY KEY, u_word varchar, u_noun varchar); 
// Or shd I do this... 
CREATE TABLE NounTable (u_id autonumber PRIMARY KEY, u_word varchar, u_noun varchar); 

PS:MYSQL有什么区别& SQLite如果有?也许不同的变量?或者是他们在数据库中存储&查找信息的唯一区别?

回答

2

就性能而言,如果您在第一个选择中对u_word进行索引,则不会有太大区别。这主要取决于你有哪些表格,以及你想表示单词对还是有单词和名词。

如果您没有任何特定的原因来增加您的ID您应该使用自动编号。通过手动增加密钥,您始终面临竞争状况和碰撞风险,而通过自动编号处理IIRC。