这些是否等同于添加唯一约束?

Are these equivalent for adding a unique constraint?

我想知道以下查询是否等价。 我想为电影中的两列添加唯一约束 table

CREATE TABLE Movie (
 title VARCHAR(255),
 year INTEGER,
 …
 producerC# INTEGER,
 UNIQUE (title, year)
);
CREATE TABLE Movie (
 title VARCHAR(255) UNIQUE,
 year INTEGER UNIQUE,
 …
 producerC# INTEGER
);

第一个版本将强制电影名称和电影年份的组合始终是唯一的。因此,允许以下两种组合:

Invasion of the Body Snatchers, 1956
Invasion of the Body Snatchers, 1978

但请注意,同一部电影可以出现不止一次,前提是它不是同一年出现的。

第二个版本要求每部电影的片名和年份都是唯一的。这意味着 Body Snatchers 在给定的一年内只能出现一次。

根据我的样本数据,我猜你想使用第一个版本。

不,它们不同。

 UNIQUE (title, year)

表示标题和年份的组合是唯一的。 所以 title ="alpha", year="2022" 和 title ="beta", year="2022" 是独一无二的。

title VARCHAR(255) UNIQUE,
 year INTEGER UNIQUE,

表示各个列必须具有唯一值。 所以上面的例子违反了上面的约束,因为 2022 年是重复的。