# BallotReady schema ERD

Table and field reference for the Fivetran BallotReady connector.

## Table & Field Reference

### measure_endorsement

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| measure_id | Unknown | PK, FK |
| organization_id | Unknown | FK |
| created_at | Unknown |  |
| endorser | Unknown |  |
| recommendation | Unknown |  |
| updated_at | Unknown |  |

### measure_argument

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| measure_id | Unknown | PK, FK |
| pro_con | Unknown |  |
| source_url | Unknown |  |
| text | Unknown |  |

### measure

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| party_id | Unknown | PK |
| election_id | Unknown | FK |
| issue_id | Unknown | FK |
| mtfcc | Unknown | FK |
| con_snippet | Unknown |  |
| created_at | Unknown |  |
| has_unknown_boundaries | Unknown |  |
| name | Unknown |  |
| party_created_at | Unknown |  |
| party_name | Unknown |  |
| party_short_name | Unknown |  |
| party_updated_at | Unknown |  |
| pro_snippet | Unknown |  |
| state | Unknown |  |
| summary | Unknown |  |
| text | Unknown |  |
| title | Unknown |  |
| updated_at | Instant |  |

### organization_url

| Column | Type | Keys |
| --- | --- | --- |
| url | Unknown | PK |
| organization_id | Unknown | PK, FK |
| type | Unknown |  |

### organization

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| issue_id | Unknown | FK |
| created_at | Unknown |  |
| description | Unknown |  |
| name | Unknown |  |
| state | Unknown |  |
| updated_at | Unknown |  |

### position_election_frequency

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| position_id | Unknown | FK |
| frequency | Unknown |  |
| reference_year | Unknown |  |
| seats | Unknown |  |
| valid_from | Unknown |  |
| valid_to | Unknown |  |

### position_issue

| Column | Type | Keys |
| --- | --- | --- |
| issue_id | Unknown | PK, FK |
| position_id | Unknown | PK, FK |

### position

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| issue_id | Unknown | FK |
| mtfcc | Unknown | FK |
| normalized_position_mtfcc | Unknown | FK |
| appointed | Unknown |  |
| created_at | Unknown |  |
| description | Unknown |  |
| eligibility_requirements | Unknown |  |
| employment_type | Unknown |  |
| filing_address | Unknown |  |
| filing_phone | Unknown |  |
| filing_requirements | Unknown |  |
| has_primary | Unknown |  |
| has_ranked_choice_general | Unknown |  |
| has_ranked_choice_primary | Unknown |  |
| has_unknown_boundaries | Unknown |  |
| judicial | Unknown |  |
| level | Unknown |  |
| maximum_filing_fee | Unknown |  |
| minimum_age | Unknown |  |
| must_be_registered_voter | Unknown |  |
| must_be_resident | Unknown |  |
| must_have_professional_experience | Unknown |  |
| name | Unknown |  |
| normalized_position_id | Unknown |  |
| normalized_position_name | Unknown |  |
| paperwork_instructions | Unknown |  |
| partisan_type | Unknown |  |
| ranked_choice_max_votes_general | Unknown |  |
| ranked_choice_max_votes_primary | Unknown |  |
| retention | Unknown |  |
| row_order | Unknown |  |
| running_mate_style | Unknown |  |
| salary | Unknown |  |
| seats | Unknown |  |
| selections_allowed | Unknown |  |
| state | Unknown |  |
| sub_area_name | Unknown |  |
| sub_area_value | Unknown |  |
| tier | Unknown |  |
| updated_at | Instant |  |

### issue

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| name | Unknown |  |
| plugin_enabled | Unknown |  |
| response_type | Unknown |  |
| row_order | Unknown |  |

### place_address

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| place_id | Unknown | PK, FK |
| address_line_1 | Unknown |  |
| address_line_2 | Unknown |  |
| city | Unknown |  |
| country | Unknown |  |
| created_at | Unknown |  |
| state | Unknown |  |
| type | Unknown |  |
| updated_at | Unknown |  |
| zip | Unknown |  |

### place_url

| Column | Type | Keys |
| --- | --- | --- |
| url | Unknown | PK |
| place_id | Unknown | PK, FK |
| type | Unknown |  |

### place_contact

| Column | Type | Keys |
| --- | --- | --- |
| index | Unknown | PK |
| place_id | Unknown | PK, FK |
| email | Unknown |  |
| fax | Unknown |  |
| phone | Unknown |  |
| type | Unknown |  |

### place_registration_option_document

| Column | Type | Keys |
| --- | --- | --- |
| document | Unknown | PK |
| place_id | Unknown | PK, FK |
| place_registration_option_id | Unknown | PK, FK |

### place_registration_option_eligibility

| Column | Type | Keys |
| --- | --- | --- |
| eligibility | Unknown | PK |
| place_id | Unknown | PK, FK |
| place_registration_option_id | Unknown | PK, FK |

### place_registration_option_feature

| Column | Type | Keys |
| --- | --- | --- |
| feature | Unknown | PK |
| place_id | Unknown | PK, FK |
| place_registration_option_id | Unknown | PK, FK |

### place_registration_option

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| place_id | Unknown | PK, FK |
| available_if_date_of_birth_before_or_equals | Unknown |  |
| channel | Unknown |  |
| created_at | Unknown |  |
| documents | Unknown |  |
| eligibility | Unknown |  |
| features | Unknown |  |
| is_id_required | Unknown |  |
| is_preregistration | Unknown |  |
| safest_registration_dead_line_in_days | Unknown |  |
| updated_at | Unknown |  |

### place_form_field

| Column | Type | Keys |
| --- | --- | --- |
| _fivetran_id | String | PK |
| place_form_id | Unknown | FK |
| place_id | Unknown | FK |
| is_required | Unknown |  |
| label | Unknown |  |
| name | Unknown |  |
| options | Unknown |  |
| type | Unknown |  |

### place_form

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| place_id | Unknown | PK, FK |
| locale | Unknown |  |
| type | Unknown |  |
| url | Unknown |  |

### place

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| mtfcc | Unknown | FK |
| can_vote_in_primary_when_18_by_general | Unknown |  |
| created_at | Unknown |  |
| dissolved | Unknown |  |
| has_vote_by_mail | Unknown |  |
| is_printing_enabled | Unknown |  |
| is_receiver_of_vote_by_mail_requests | Unknown |  |
| name | Unknown |  |
| primary_type | Unknown |  |
| state | Unknown |  |
| timezone | Unknown |  |
| updated_at | Unknown |  |

### office_holder_party

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| office_holder_id | Unknown | PK, FK |
| created_at | Unknown |  |
| name | Unknown |  |
| short_name | Unknown |  |
| updated_at | Unknown |  |

### office_holder_url

| Column | Type | Keys |
| --- | --- | --- |
| url | Unknown | PK |
| office_holder_id | Unknown | PK, FK |
| type | Unknown |  |

### office_holder_address

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| office_holder_id | Unknown | PK, FK |
| address_line_1 | Unknown |  |
| address_line_2 | Unknown |  |
| city | Unknown |  |
| country | Unknown |  |
| created_at | Unknown |  |
| state | Unknown |  |
| type | Unknown |  |
| updated_at | Unknown |  |
| zip | Unknown |  |

### office_holder_contact

| Column | Type | Keys |
| --- | --- | --- |
| index | Unknown | PK |
| office_holder_id | Unknown | PK, FK |
| email | Unknown |  |
| fax | Unknown |  |
| phone | Unknown |  |
| type | Unknown |  |

### office_holder

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| people_id | Unknown | FK |
| position_id | Unknown | FK |
| central_phone | Unknown |  |
| end_at | Unknown |  |
| is_appointed | Unknown |  |
| is_current | Unknown |  |
| is_off_cycle | Unknown |  |
| is_vacant | Unknown |  |
| office_phone | Unknown |  |
| office_title | Unknown |  |
| other_phone | Unknown |  |
| primary_email | Unknown |  |
| specificity | Unknown |  |
| start_at | Unknown |  |
| total_years_in_office | Unknown |  |
| updated_at | Instant |  |

### race_filing_period

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| race_id | Unknown | PK, FK |
| end_on | Unknown |  |
| notes | Unknown |  |
| start_on | Unknown |  |
| type | Unknown |  |

### race_candidacy_stance

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| race_candidacy_id | Unknown | PK, FK |
| race_id | Unknown | PK, FK |
| issue_id | Unknown | FK |
| locale | Unknown |  |
| reference_url | Unknown |  |
| statement | Unknown |  |

### race_candidacy_party

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| race_candidacy_id | Unknown | PK, FK |
| race_id | Unknown | PK, FK |
| created_at | Unknown |  |
| name | Unknown |  |
| short_name | Unknown |  |
| updated_at | Unknown |  |

### race_candidacy_endorsement

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| race_candidacy_id | Unknown | PK, FK |
| race_id | Unknown | PK, FK |
| organization_id | Unknown | FK |
| created_at | Unknown |  |
| endorser | Unknown |  |
| recommendation | Unknown |  |
| updated_at | Unknown |  |

### race_candidacy

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| race_id | Unknown | PK, FK |
| candidate_id | Unknown | FK |
| election_id | Unknown | FK |
| position_id | Unknown | FK |
| created_at | Unknown |  |
| is_certified | Unknown |  |
| is_hidden | Unknown |  |
| uncertified | Unknown |  |
| updated_at | Unknown |  |
| withdrawn | Unknown |  |

### race

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| election_id | Unknown | FK |
| position_id | Unknown | FK |
| created_at | Unknown |  |
| is_disabled | Unknown |  |
| is_partisan | Unknown |  |
| is_primary | Unknown |  |
| is_recall | Unknown |  |
| is_runoff | Unknown |  |
| is_unexpired | Unknown |  |
| seats | Unknown |  |
| updated_at | Instant |  |

### vip_election_party

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| election_id | Unknown | PK, FK |
| vip_election_id | Unknown | PK, FK |
| created_at | Unknown |  |
| name | Unknown |  |
| short_name | Unknown |  |
| updated_at | Unknown |  |

### vip_election

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| election_id | Unknown | PK, FK |

### election

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| created_at | Unknown |  |
| election_day | Unknown |  |
| name | Unknown |  |
| original_election_date | Unknown |  |
| state | Unknown |  |
| timezone | Unknown |  |
| updated_at | Instant |  |

### people_url

| Column | Type | Keys |
| --- | --- | --- |
| url | Unknown | PK |
| people_id | Unknown | PK, FK |
| type | Unknown |  |

### people_image

| Column | Type | Keys |
| --- | --- | --- |
| url | Unknown | PK |
| people_id | Unknown | PK, FK |
| type | Unknown |  |

### people_experience

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| people_id | Unknown | PK, FK |
| end_time | Unknown |  |
| organization | Unknown |  |
| start_time | Unknown |  |
| title | Unknown |  |
| type | Unknown |  |

### people_degree

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| people_id | Unknown | PK, FK |
| degree | Unknown |  |
| graduation_year | Unknown |  |
| major | Unknown |  |
| school | Unknown |  |

### people_candidacy_stance

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| people_candidacy_id | Unknown | PK, FK |
| people_id | Unknown | PK, FK |
| issue_id | Unknown | FK |
| locale | Unknown |  |
| reference_url | Unknown |  |
| statement | Unknown |  |

### people_candidacy_party

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| people_candidacy_id | Unknown | PK, FK |
| people_id | Unknown | PK, FK |
| created_at | Unknown |  |
| name | Unknown |  |
| short_name | Unknown |  |
| updated_at | Unknown |  |

### people_candidacy_endorsement

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| people_candidacy_id | Unknown | PK, FK |
| people_id | Unknown | PK, FK |
| organization_id | Unknown | FK |
| created_at | Unknown |  |
| endorser | Unknown |  |
| recommendation | Unknown |  |
| updated_at | Unknown |  |

### people_candidacy

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| people_id | Unknown | PK, FK |
| candidate_id | Unknown | FK |
| election_id | Unknown | FK |
| position_id | Unknown | FK |
| created_at | Unknown |  |
| is_certified | Unknown |  |
| is_hidden | Unknown |  |
| uncertified | Unknown |  |
| updated_at | Unknown |  |
| withdrawn | Unknown |  |

### people

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| created_at | Unknown |  |
| first_name | Unknown |  |
| full_name | Unknown |  |
| headshot_default_url | Unknown |  |
| headshot_thumbnail_url | Unknown |  |
| last_name | Unknown |  |
| middle_name | Unknown |  |
| nick_name | Unknown |  |
| suffix | Unknown |  |
| updated_at | Unknown |  |

### mtfcc

| Column | Type | Keys |
| --- | --- | --- |
| id | Unknown | PK |
| created_at | Unknown |  |
| mtfcc | Unknown |  |
| name | Unknown |  |
| updated_at | Unknown |  |

## Relationships

- measure_endorsement(organization_id) → organization(id)
- measure_endorsement(measure_id) → measure(id)
- measure_argument(measure_id) → measure(id)
- measure(election_id) → election(id)
- measure(mtfcc) → mtfcc(mtfcc)
- measure(issue_id) → issue(id)
- organization_url(organization_id) → organization(id)
- organization(issue_id) → issue(id)
- position_election_frequency(position_id) → position(id)
- position_issue(issue_id) → issue(id)
- position_issue(position_id) → position(id)
- position(mtfcc) → mtfcc(mtfcc)
- position(normalized_position_mtfcc) → mtfcc(mtfcc)
- position(issue_id) → issue(id)
- place_address(place_id) → place(id)
- place_url(place_id) → place(id)
- place_contact(place_id) → place(id)
- place_registration_option_document(place_registration_option_id) → place_registration_option(id)
- place_registration_option_document(place_id) → place_registration_option(place_id)
- place_registration_option_eligibility(place_registration_option_id) → place_registration_option(id)
- place_registration_option_eligibility(place_id) → place_registration_option(place_id)
- place_registration_option_feature(place_registration_option_id) → place_registration_option(id)
- place_registration_option_feature(place_id) → place_registration_option(place_id)
- place_registration_option(place_id) → place(id)
- place_form_field(place_id) → place_form(place_id)
- place_form_field(place_form_id) → place_form(id)
- place_form(place_id) → place(id)
- place(mtfcc) → mtfcc(mtfcc)
- office_holder_party(office_holder_id) → office_holder(id)
- office_holder_url(office_holder_id) → office_holder(id)
- office_holder_address(office_holder_id) → office_holder(id)
- office_holder_contact(office_holder_id) → office_holder(id)
- office_holder(position_id) → position(id)
- office_holder(people_id) → people(id)
- race_filing_period(race_id) → race(id)
- race_candidacy_stance(issue_id) → issue(id)
- race_candidacy_stance(race_candidacy_id) → race_candidacy(id)
- race_candidacy_stance(race_id) → race_candidacy(race_id)
- race_candidacy_party(race_candidacy_id) → race_candidacy(id)
- race_candidacy_party(race_id) → race_candidacy(race_id)
- race_candidacy_endorsement(organization_id) → organization(id)
- race_candidacy_endorsement(race_candidacy_id) → race_candidacy(id)
- race_candidacy_endorsement(race_id) → race_candidacy(race_id)
- race_candidacy(position_id) → position(id)
- race_candidacy(election_id) → election(id)
- race_candidacy(candidate_id) → race_candidacy(id)
- race_candidacy(race_id) → race(id)
- race(position_id) → position(id)
- race(election_id) → election(id)
- vip_election_party(election_id) → vip_election(election_id)
- vip_election_party(vip_election_id) → vip_election(id)
- vip_election(election_id) → election(id)
- people_url(people_id) → people(id)
- people_image(people_id) → people(id)
- people_experience(people_id) → people(id)
- people_degree(people_id) → people(id)
- people_candidacy_stance(issue_id) → issue(id)
- people_candidacy_stance(people_candidacy_id) → people_candidacy(id)
- people_candidacy_stance(people_id) → people_candidacy(people_id)
- people_candidacy_party(people_candidacy_id) → people_candidacy(id)
- people_candidacy_party(people_id) → people_candidacy(people_id)
- people_candidacy_endorsement(organization_id) → organization(id)
- people_candidacy_endorsement(people_candidacy_id) → people_candidacy(id)
- people_candidacy_endorsement(people_id) → people_candidacy(people_id)
- people_candidacy(position_id) → position(id)
- people_candidacy(election_id) → election(id)
- people_candidacy(candidate_id) → people_candidacy(id)
- people_candidacy(people_id) → people(id)
