在我的一个应用程序中,我需要将翻译保存到数据库中。它们每个都由三个参数标识。代码,语言和文本类型。我的第一个想法是按照以下方式将它们全部保存到一个表中:
"CREATE TABLE IF NOT EXISTS translations("\
"code INT NOT NULL,"\
"language char(3) NOT NULL,"\
"type char(20) NOT NULL,"\
"text Text,"\
"PRIMARY KEY(code,language,type)) WITHOUT ROWID;";
这使查询变得很容易使用:
"SELECT text FROM translations WHERE code=? AND language=? AND type=? LIMIT 1;"
但是,由于我之前还没有使用数据库,所以我不确定是否有更好的方法可以做到这一点。 (我尤其不确定拥有多个主键是否是一件好事)。 将其拆分为多个表是否有意义?
答案 0 :(得分:0)
我建议保留一个主键。在SQLite中:
CREATE TABLE IF NOT EXISTS translations (
translation_id int auto_increment, -- becomes a synonym for rowid
code INT NOT NULL,
language char(3) NOT NULL,
type char(20) NOT NULL,
text Text,
UNIQUE (code, language, type)
);
要删除特定行时,主键很方便。使用自动增量还可以使您看到事物添加的顺序(尽管我还将添加createdAt
时间戳)。