Physical — relational Module: agent

    Agent module — relational schema

    person and organisation are the substance Kinds that bear roles. proprietorship is a reified UFO Relator binding a registered title to its proprietor set. buyer, seller, and proprietor are participation tables — their identity is parasitic on a bearer plus a founding relator, so they carry no standalone identity that anything else references.

    Tables

    TableRealisesKindBearer / founding relator
    personPersonentity—
    organisationOrganisationentity—
    name_change_eventNameChangeEventeventFK → person
    proprietorshipProprietorshiprelatorFK → registered_title, property
    proprietorProprietor (Role)rolebearer (person xor organisation); founded by proprietorship
    sellerSeller (RoleMixin)rolebearer (person xor organisation); founded by transaction
    buyerBuyer (RoleMixin)rolebearer (person xor organisation); founded by transaction
    seller_evidenced_authorityhasEvidencedAuthority 0..*junctionseller × claim

    Each role table (proprietor, seller, buyer) carries CHECK (num_nonnull(person_id, organisation_id) = 1) — borne by exactly one Person or Organisation.

    Entity-relationship diagram

    erDiagram accTitle: Agent module — entity-relationship diagram accDescr: person and organisation as bearers; proprietorship as a reified relator founding proprietor rows; seller and buyer founded by transaction; the seller-evidenced-authority junction to claim. registered_title, transaction and claim are cross-module. person { uuid person_id PK text uri UK text has_asserted_capacity boolean has_special_category_data text has_legal_basis_uri } organisation { uuid organisation_id PK text uri UK text has_asserted_capacity } name_change_event { uuid name_change_event_id PK text uri UK uuid person_id FK timestamptz at_time } proprietorship { uuid proprietorship_id PK text uri UK uuid registered_title_id FK uuid property_id FK } proprietor { uuid proprietor_id PK text uri UK uuid proprietorship_id FK uuid person_id FK uuid organisation_id FK text owner_type FK text role FK } seller { uuid seller_id PK text uri UK uuid transaction_id FK uuid person_id FK uuid organisation_id FK text has_asserted_capacity FK text has_others_aged_17_or_over FK text role FK } buyer { uuid buyer_id PK text uri UK uuid transaction_id FK uuid person_id FK uuid organisation_id FK text role FK } seller_evidenced_authority { uuid seller_id PK,FK uuid claim_id PK,FK } name_change_event }o--|| person : "associated with" proprietorship }o--|| registered_title : "binds title" proprietorship ||--o{ proprietor : "founds" proprietor }o--o| person : "borne by" proprietor }o--o| organisation : "borne by" transaction ||--o{ seller : "founds" transaction ||--o{ buyer : "founds" seller }o--o| person : "borne by" seller }o--o| organisation : "borne by" buyer }o--o| person : "borne by" buyer }o--o| organisation : "borne by" seller ||--o{ seller_evidenced_authority : "has evidenced authority" claim ||--o{ seller_evidenced_authority : "evidences"

    Lookup tables

    LookupBound byMembers
    owner_typeproprietor.owner_type2
    role_schemeseller.role, buyer.role, proprietor.role12
    sellers_capacityseller.has_asserted_capacity6
    participant_statusoverlay profiles4

    Mapping notes

    • Roles have no identity-bearing key. buyer / seller / proprietor exist only as a (bearer, founding-relator) pairing, with two nullable bearer foreign keys and an exactly-one CHECK. RoleMixins (Buyer, Seller) are cross-sortal (Person or Organisation); Proprietor (a Role) is normally a Person, with Organisations entering through a named sub-role.
    • Proprietorship is a reified Relator. Joint-tenancy vs tenants-in-common is a property of the proprietorship, not of the individual proprietors; ownership is never flattened to a registered_title.owner_person_id foreign key.
    • Name changes preserve identity. A name_change_event row records the change; the person row persists. A new Person is never minted on a name change.
    • person.has_legal_basis_uri is the one column added beyond the declared logical attributes — it hosts the SHACL rule that special-category data must carry a dpv:hasLegalBasis. (registered_title, transaction, claim live in other modules.)

    Cross-tier

    Logical tier: agent module.

    Comments

    Loading comments…