diff --git a/README.md b/README.md index 4a27a6b..504ef70 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,7 @@ smart people at [Hashrocket](http://hashrocket.com/). ### postgres - [A Better Null Display Character](postgres/a-better-null-display-character.md) +- [Adding Composite Uniqueness Constraints](postgres/adding-composite-uniqueness-constraints.md) - [Auto Expanded Display](postgres/auto-expanded-display.md) - [Checking The Type Of A Value](postgres/checking-the-type-of-a-value.md) - [Configure The Timezone](postgres/configure-the-timezone.md) diff --git a/postgres/adding-composite-uniqueness-constraints.md b/postgres/adding-composite-uniqueness-constraints.md new file mode 100644 index 0000000..2fa0d85 --- /dev/null +++ b/postgres/adding-composite-uniqueness-constraints.md @@ -0,0 +1,22 @@ +# Adding Composite Uniqueness Constraints + +There are two ways in Postgres to create a composite uniqueness constraint, +that is, a constraint that ensures that the combination of two or more +values on a table only appear once. For the following two code snippets, +assume that we have a table relating Pokemon and Trainers and that our +domain restricts each Trainer to only having at most one of each Pokemon. + +The first approach is to create a `constraint` directly on the table: + +```sql +alter table pokemons_trainers + add constraint pokemons_trainers_pokemon_id_trainer_id_key + unique (pokemon_id, trainer_id); +``` + +The second approach is to create a unique index: + +```sql +create unique index pokemons_trainers_pokemon_id_trainer_id_idx + on pokemons_trainers (pokemon_id, trainer_id); +```