@startuml

hide circle

namespace BaseData {
    class country {
        alpha2
        alpha3
        num
        name
    }

    class currency {
        id
        name
        symbol
    }

    namespace AT {
        class AT_bank {
            blz
            name
            street
            plz
            okz
            tel_nr
            fax_nr
            email_address
            website
        }

        class AT_bundesland {
            id
            short1
            short2
            name
        }

        class AT_gemeinde {
            gkz
            land_id
            name
        }

        class AT_ort {
            okz
            gkz
            name
        }

        class AT_plz {
            plz
            okz
            id
            name
        }

        AT_ort -> AT_gemeinde
        AT_plz --> AT_ort
        AT_gemeinde --> AT_bundesland
        AT_bank -> AT_plz
        AT_bank -> BaseData.bank
        AT_plz -> BaseData.postal_code

        AT_ort --> BaseData.origin
        AT_ort --> BaseData.grosslage
    }

    class postal_code {
        country
        id
    }

    class wine_variety {
        id
        name
    }

    class quality_level {
        id
        name
        from_oe
        to_oe
    }

    class origin {
        id
        name
        parent
        land_id
    }

    class bank {
        country
        bank_id
    }

    class grosslage {
        id
        name
    }

    class grosslage_origin {
        grosslage_id
        origin_id
    }

    grosslage_origin --> grosslage
    grosslage_origin -> origin

    bank --> country
    origin -> origin
    origin --> BaseData.AT.AT_bundesland
}

namespace Data {
    class member {
        mgnr
        branch_id
        given_name
        family_name
        year_of_birth
        join_date
        leave_date
    }

    class contact_information {
        mgnr
        postal_code
        street
        tel_nr
        mobile_nr
        email_address
    }

    class branch {
        id
        name
    }

    class area_commitment {
        AT_ort
        parzellen
        mgnr
        reed_id
        area
        wine_variety
        wine_attribute
        from_year
        to_year
    }

    class billing_address {
        mgnr
        name
        postal_code
        street
    }

    class bank_account {
        mgnr
        country
        bank_id
        account_nr
        name
    }

    class wine_attribute {
        id
        name
        short
    }

    class season {
        year
        start_date
        end_date
        currency
    }

    class reed {
        id
        grosslage_id
        name
    }

    reed -> BaseData.AT.AT_ort

    bank_account --> BaseData.bank

    member --> branch
    member <-- area_commitment
    member <-- billing_address
    member <-- contact_information
    member <-- bank_account

    billing_address --> BaseData.postal_code
    contact_information --> BaseData.postal_code

    area_commitment --> BaseData.wine_variety
    area_commitment --> wine_attribute
    area_commitment --> BaseData.AT.AT_ort
    area_commitment --> reed
    area_commitment --> BaseData.wine_variety

    season --> BaseData.currency
}

namespace Season {
    class delivery {
        year
        nr
        mgnr
        date
        time
        branch_id
    }

    class delivery_part {
        year
        delivery_nr
        part_nr
        weight
        gradation
        quality_level
        wine_variety
    }

    class modifier {
        year
        id
        name
        value
    }

    class delivery_part_modifier {
        year
        delivery_nr
        part_nr
        modifier_id
    }

    delivery --> Data.season
    modifier --> Data.season

    delivery --> Data.member
    delivery --> Data.branch
    delivery <- delivery_part
    delivery_part --> BaseData.quality_level
    delivery_part --> BaseData.wine_variety
    delivery_part --> Data.wine_attribute

    delivery_part_modifier --> modifier
    delivery_part_modifier --> delivery_part
}

@enduml