<varlistentry>
<term><literal>UNIQUE</literal> (column constraint)</term>
<term><literal>UNIQUE ( <replaceable class="parameter">column_name</replaceable> [, ... ] )</literal>
- <optional> INCLUDE ( <replaceable class="parameter">column_name</replaceable> [, ...]) </optional> (table constraint)</term>
+ <optional> <literal>INCLUDE ( <replaceable class="parameter">column_name</replaceable> [, ...])</literal> </optional> (table constraint)</term>
<listitem>
<para>
The <literal>UNIQUE</literal> constraint specifies that a
group of one or more columns of a table can contain
- only unique values. The behavior of the unique table constraint
- is the same as that for column constraints, with the additional
- capability to span multiple columns.
+ only unique values. The behavior of a unique table constraint
+ is the same as that of a unique column constraint, with the
+ additional capability to span multiple columns. The constraint
+ therefore enforces that any two rows must differ in at least one
+ of these columns.
</para>
<para>
</para>
<para>
- Each unique table constraint must name a set of columns that is
+ Each unique constraint should name a set of columns that is
different from the set of columns named by any other unique or
- primary key constraint defined for the table. (Otherwise it
- would just be the same constraint listed twice.)
+ primary key constraint defined for the table. (Otherwise, redundant
+ unique constraints will be discarded.)
</para>
<para>
<para>
Adding a unique constraint will automatically create a unique btree
index on the column or group of columns used in the constraint.
- The optional clause <literal>INCLUDE</literal> adds to that index
- one or more columns on which the uniqueness is not enforced.
- Note that although the constraint is not enforced on the included columns,
- it still depends on them. Consequently, some operations on these columns
+ </para>
+
+ <para>
+ The optional <literal>INCLUDE</literal> clause adds to that index
+ one or more columns that are simply <quote>payload</quote>: uniqueness
+ is not enforced on them, and the index cannot be searched on the basis
+ of those columns. However they can be retrieved by an index-only scan.
+ Note that although the constraint is not enforced on included columns,
+ it still depends on them. Consequently, some operations on such columns
(e.g., <literal>DROP COLUMN</literal>) can cause cascaded constraint and
index deletion.
</para>
<varlistentry>
<term><literal>PRIMARY KEY</literal> (column constraint)</term>
<term><literal>PRIMARY KEY ( <replaceable class="parameter">column_name</replaceable> [, ... ] )</literal>
- <optional> INCLUDE ( <replaceable class="parameter">column_name</replaceable> [, ...]) </optional> (table constraint)</term>
+ <optional> <literal>INCLUDE ( <replaceable class="parameter">column_name</replaceable> [, ...])</literal> </optional> (table constraint)</term>
<listitem>
<para>
The <literal>PRIMARY KEY</literal> constraint specifies that a column or
<para>
<literal>PRIMARY KEY</literal> enforces the same data constraints as
- a combination of <literal>UNIQUE</literal> and <literal>NOT NULL</literal>, but
+ a combination of <literal>UNIQUE</literal> and <literal>NOT
+ NULL</literal>. However,
identifying a set of columns as the primary key also provides metadata
about the design of the schema, since a primary key implies that other
tables can rely on this set of columns as a unique identifier for rows.
</para>
<para>
- <literal>PRIMARY KEY</literal> constraints share the restrictions that
- <literal>UNIQUE</literal> constraints have when placed on partitioned
- tables.
+ When placed on a partitioned table, <literal>PRIMARY KEY</literal>
+ constraints share the restrictions previously decribed
+ for <literal>UNIQUE</literal> constraints.
</para>
<para>
Adding a <literal>PRIMARY KEY</literal> constraint will automatically
create a unique btree index on the column or group of columns used in the
- constraint. The optional <literal>INCLUDE</literal> clause allows a list
- of columns to be specified which will be included in the non-key portion
- of the index. Although uniqueness is not enforced on the included columns,
- the constraint still depends on them. Consequently, some operations on the
- included columns (e.g., <literal>DROP COLUMN</literal>) can cause cascaded
- constraint and index deletion.
+ constraint.
+ </para>
+
+ <para>
+ The optional <literal>INCLUDE</literal> clause adds to that index
+ one or more columns that are simply <quote>payload</quote>: uniqueness
+ is not enforced on them, and the index cannot be searched on the basis
+ of those columns. However they can be retrieved by an index-only scan.
+ Note that although the constraint is not enforced on included columns,
+ it still depends on them. Consequently, some operations on such columns
+ (e.g., <literal>DROP COLUMN</literal>) can cause cascaded constraint and
+ index deletion.
</para>
</listitem>
</varlistentry>