The components of a record can be any type, including another record
For example, a name can be a record with three components. A record of information about a person can thus contain a record for the name.
max_title_size : constant := 4;
max_fname_size : constant := 15;
max_sname_size : constant := 20;
subtype titles is STRING( 1 .. max_title_size);
subtype fnames is STRING( 1 .. max_fname_size);
subtype snames is STRING( 1 .. max_sname_size);
-- other constants & types as before
type names is record
title : titles := ( others => space); -- title
fname : fnames := ( others => space); -- first name
sname : snames := ( others => space); -- surname
end record;
type complex_persons is record
name : names;
phone : phones := ( others => space); -- phone no
sex : sexes; -- sex of person
age : ages; -- age of person
weight: weights; -- weight of person
end record;
a_person : complex_persons; -- a person
Refer to inner components using two dot operators
You can have as many records within records as needed. Good style suggests limiting the number of levels.