Good! As you can see, UNIQUE
with multiple columns works exactly as PRIMARY KEY
does.
There is, however, one major difference between the two. We can only have one primary key in a given table, but we can have as many UNIQUE
constraints as we want. For example:
CREATE TABLE board_game (
id integer GENERATED ALWAYS AS IDENTITY UNIQUE,
name varchar(32),
genre varchar(32),
studio varchar(32),
min_players integer,
min_age integer,
price decimal(5, 2),
UNIQUE (name, genre),
UNIQUE (name, studio)
);
We now have one row with a UNIQUE
constraint and a pair of separate UNIQUE
constraints, each containing two columns. The database will check to see that each name
-genre
and name
-studio
pair are unique. It will also separately ensure that each id
is unique.
Is there a difference between one UNIQUE
constraint with multiple columns and separate UNIQUE
constraints for each column? There is. A UNIQUE
constraint with multiple columns means that the column values in the constraint must form a unique group. For example, if you had UNIQUE (name, studio, genre)
, each name
-studio
-genre
combination must be unique. However, the individual column values could be duplicates, just as we discussed earlier.
On the other hand, if you wrote name ... UNIQUE
, studio ... UNIQUE
, genre ... UNIQUE
, each fo these three column values would have to be unique. Of course, each combination of those values would also be unique, but the database wouldn't check for that.