create table associations
(
    child_peer  varchar(256)                    not null comment 'The child peer',
    parent_peer varchar(256)                    not null comment 'The parent peer',
    type        varchar(32)                     not null comment 'The association type between the parent peer to the child peer',
    client_uuid varchar(36)                     not null comment 'The client UUID that made the association between the two peers',
    timestamp   bigint default unix_timestamp() not null comment 'The Unix Timestamp for when this assoication was made',
    constraint associations_child_peer_parent_peer_uindex
        unique (child_peer, parent_peer),
    constraint associations_child_peer_type_parent_peer_uindex
        unique (child_peer, type, parent_peer),
    constraint associations_clients_uuid_fk
        foreign key (client_uuid) references clients (uuid),
    constraint associations_discovered_peers_federated_address_fk
        foreign key (child_peer) references peers (federated_address),
    constraint associations_discovered_peers_federated_address_fk2
        foreign key (parent_peer) references peers (federated_address)
)
    comment 'A table used for housing associations detected between peers';

create index associations_child_peer_index
    on associations (child_peer);

create index associations_client_uuid_index
    on associations (client_uuid);

create index associations_parent_peer_index
    on associations (parent_peer);

