Sql 用于翻译的数据库模式
在我的一个应用程序中,我需要将翻译保存到数据库中。其中每一个都由三个参数标识。代码、语言和文本类型。我的第一个想法是通过以下方式将它们全部保存到一个表中:Sql 用于翻译的数据库模式,sql,sqlite,Sql,Sqlite,在我的一个应用程序中,我需要将翻译保存到数据库中。其中每一个都由三个参数标识。代码、语言和文本类型。我的第一个想法是通过以下方式将它们全部保存到一个表中: "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,languag
"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;"
然而,由于我以前没有使用数据库,我不太确定是否有更好的方法来实现这一点。(我特别不确定拥有多个主键是否是件好事)。
将其拆分为多个表是否有意义 我建议保留主键。在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
timestamp)。我建议保留主键。在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)
);
要删除特定行时,主键很方便。使用自动增量也可以看到添加的顺序(虽然我也会添加一个<代码> CueDATA< /code >时间戳).< /P>这和C++有什么关系?这和C++有什么关系?为什么我不能只使用代码“>代码中的地球删除?”语言=?和类型=代码>?我真的不明白使用自动递增翻译的好处_id@maxbachmann . . . 你可以做到。如果你有一个整数主键,你可以这样做。我只是发现使用唯一的标识列比使用多个列更容易。为什么我不能使用
DELETE FROM translations WHERE code=?语言=?和类型=代码>?我真的不明白使用自动递增翻译的好处_id@maxbachmann . . . 你可以做到。如果你有一个整数主键,你可以这样做。我只是发现使用唯一的标识列比使用多个列更容易。