用于翻译的数据库架构

时间:2019-06-04 11:49:32

标签: 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,language,type)) WITHOUT ROWID;";

这使查询变得很容易使用:

"SELECT text FROM translations WHERE code=? AND language=? AND type=? LIMIT 1;"

但是,由于我之前还没有使用数据库,所以我不确定是否有更好的方法可以做到这一点。 (我尤其不确定拥有多个主键是否是一件好事)。 将其拆分为多个表是否有意义?

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时间戳)。