改进MySQL数据库设计

时间:2012-02-11 05:14:32

标签: mysql sql sqlite

我有两个关于如何设计SQL(SQLite3)数据库的问题。我使用数据库的方式如下:

我有一个形容词(或任何单词)&我需要将这个词解析为它的名词形式。因此,为了“愉快地”,我需要将这个词解析为“快乐”(一个名词及其通用形式)。对于“饥饿”,我需要将其解决为“饥饿”

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,对于row 2 = 2 .... row n = n。

在过去添加一行我首先找到最大的唯一ID,然后向其添加1,然后创建该新行。但是我曾经听说有一个SQL变量,我认为它会自动执行此操作, autonumber ,是真的吗?即,它会自动增加。那么我应该使用它,还是建议我坚持将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,如果有的话?也许不同的变量?或者是他们存储和存储方式的唯一区别在数据库中查找信息?

1 个答案:

答案 0 :(得分:2)

如果你在第一个选择中索引u_word,就性能而言,没有太大区别。这主要取决于你拥有的其他表格,以及你是想表示单词对还是有一个单词及其名词。

如果您没有任何特殊原因要增加ID,则应使用自动编号。手动增加一个键,你总是会遇到由自动编号处理的IIRC的竞争条件和碰撞的风险。