@startuml
!define table(x) class x
!define primary_key(x) <u>x</u>
!define foreign_key(x) //x//
!define composition(a,b,c) a *--b:c
!define aggregation(a,b,c) a o--b:c
hide methods
hide stereotypes
hide circle

title Database schema

legend left
    Each entity table has columns:
    *tsversion: long
    *deleted: int
endlegend

table(publisher) {
    primary_key(id): int
    name: string
    domain: string
}

table(blocked_advertiser) {
    primary_key(id): int
    foreign_key(publisher_id): int
    domain: string
}
composition(publisher, blocked_advertiser, publisher_id)

table(blocked_category) {
    primary_key(id): int
    foreign_key(publisher_id): int
    foreign_key(iab_category_id): int
}
composition(iab_category, blocked_category, iab_category_id)
composition(publisher, blocked_category, publisher_id)

table(iab_category) {
    primary_key(id): int
    category: string
    foreign_key(parent_id): int null
}
aggregation(iab_category, iab_category, parent_id)

table(site) {
    primary_key(id): int
    foreign_key(publisher_id): int
    name: string
    privacy_policy: int
    keyword: string
    is_app: int
    app_bundle: string
    app_store_url: string
    app_ver: string
}
composition(publisher, site, publisher_id)

table(site_iab_category) {
    primary_key(id): int
    foreign_key(site_id): int
    foreign_key(iab_category_id): int
}
composition(site, site_iab_category, site_id)
composition(iab_category, site_iab_category, iab_category_id)

table(display_manager) {
    primary_key(id): int
    name: string
    ver: string
}

table(site_display_manager) {
    primary_key(id): int
    foreign_key(site_id): int
    foreign_key(display_manager_id): int
}
composition(site, site_display_manager, site_id)
composition(display_manager, site_display_manager, display_manager_id)

table(segment) {
    primary_key(id): int
    foreign_key(data_provider_id): int
    name: string
    value: string
}
composition(data_provider, segment, data_provider_id)

table(data_provider) {
    primary_key(id): int
    name: string
}

table(bidder) {
    primary_key(id): int
    name: string
    domain: string
}

@enduml
