我正确定义了所有键吗?我需要添加索引吗?

时间:2016-05-10 01:35:41

标签: sqlite indexing foreign-keys unique-constraint

我有几个表:帐户和员工,我正在尝试为帐户和员工之间的任何给定组合存储评级和时间戳。对于给定的Account + Employee组合,对于相同的时间戳,不应存在两个评级。

这是我到目前为止所做的:

CREATE TABLE main_table (
    _ID INTEGER PRIMARY KEY AUTOINCREMENT, 
    account_id INTEGER NOT NULL, 
    employee_id INTEGER NOT NULL,
    rating REAL NOT NULL, 
    timestamp LONG NOT NULL, 
    FOREIGN KEY(account_id) REFERENCES ACCOUNTS(_ID), 
    FOREIGN KEY(employee_id) REFERENCES EMPLOYEES(_ID), 
    UNIQUE (account_id, employee_id, timestamp));

这是定义我要做的事情的正确方法吗?我还需要创建一个单独的索引吗?

CREATE INDEX main_table_idx ON main_table (account_id, employee_id, timestamp);

1 个答案:

答案 0 :(得分:1)

使用唯一索引实现唯一约束。

因此,不需要单独创建索引。

正如documentation

中所述
  

在大多数情况下,UNIQUE和PRIMARY KEY约束由。实现   在数据库中创建唯一索引。 (例外是INTEGER   关于WITHOUT ROWID表的PRIMARY KEY和PRIMARY KEY。)

根据您的描述,唯一约束似乎是正确的。