The %unique
and %key
special fields are
used to avoid several instances of the
same field in a record, and to implement keys in record sets.
Their usage is:
%unique: field1 field2 ... fieldN %key: field
The field names are separated by one or more blank characters.
Normally it is permitted for a record to contain two or more fields of
the same name.
The %unique
special field revokes this permissiveness.
A field declared “unique” cannot appear more than once in a single record.
For example, an entry in an address book database could contain an
Age
field. It does not make sense for a single person to be of
several ages. So, a field could be declared as “unique” in the
corresponding record descriptor as follows:
%rec: Contact %mandatory: Name %unique: Age
Several %unique
fields can appear in the same record
descriptor. The set of unique fields is the union of all the entries.
%key
makes the referenced field the primary key of the record
set.
The primary key behaves as if both %unique
and
%mandatory
had been specified for that field.
Additionally, there is further restriction, viz:
a given value of a primary key field may appear no more than once within a
record set.
Consider for example a database of items in stock. Each item is
identified by a numerical Id
field. No item may have more than
one Id
, and no items may exist without an associated
Id
. Additionally, no two items may share the same Id
.
This common situation can be implementing by declaring Id
as
the key in the record descriptor:
%rec: Item %key: Id %mandatory: Title Id: 1 Title: Box Id: 2 Title: Sticker big
It would not make sense to have several primary keys in a record set.
Thus, it is not allowed to have several %key
fields in the
same record descriptor.
It is also forbidden for two items to share the same ‘Id’ value.
Both of these situations would be data integrity
violations, and will be reported by a checking tool.
Elsewhere, we discuss how primary keys can be used to link one record set to another using primary keys together with foreign keys. See Queries which Join Records.