Вот как я смоделирую базу данных на основе предоставленной информации:
EVENTS
INVITATIONS
- CONTACT_ID
- EVENT_ID
- ОТВЕТИЛ
CONTACTS
Не рекомендуется моделировать контакт, охватывающий всю семью. Это облегчает приглашение и отслеживание вещей, если контакт представляет человека, а не домохозяйство. В конце концов, домохозяйство может иметь от 0 до ~ 18 детей и может не включать в себя значимых других. Каждый человек, предполагающий подростковый возраст и возраст, будет иметь уникальную контактную информацию (например, мобильные телефоны, рабочие номера, адрес электронной почты и т. Д.). Это также облегчает определение численности персонала ...
Таблица приглашений позволяет суммировать приглашения и подтверждения:
SELECT e.event_name,
SUM(invited.contact_id) 'total_invited',
SUM(confirmed.contact_id) 'total_invitations_confirmed'
FROM EVENT e
JOIN INVITATIONS invited ON invited.event_id = e.event_id
JOIN INVITATIONS confirmed ON confirmed.event_id = e.event_id
AND confirmed.responded = 'Y'
GROUP BY e.event_id, e.event_name
Просто нужно присоединиться к таблице КОНТАКТОВ, чтобы определить возраст, а затем иметь возможность подкатегоризировать приглашения между взрослыми и детьми.
FAMILIAL_RELATIONS
CONTACT_ID
RELATED_CONTACT_ID
RELATION_TYPE
(родитель, ребенок, тетя / дядя, двоюродный брат, чернокожий и т. Д.)
Используйте эту таблицу для сведения членов домохозяйства ...
CONTACT_METHODS
- CONTACT_ID
- METHOD_TYPE (телефон, сотовый, бизнес-телефон, факс, электронная почта, IM и т. Д.)
- METHOD_VALUE
CONTACT_ADDRESS_XREF
- CONTACT_ID
- ADDRESS_ID
- ADDRESS_TYPE (дом, бизнес и т. Д.)
ADDRESSES
- ADDRESS_ID
- ADDRESS_1
- ADDRESS_2
- ADDRESS_3
- ADDRESS_4
- ГОРОД
- PROV_STATE
- POSTAL_CODE
- СТРАНА
Вы заметите, что я установил отношения один-к-одному с EVENTS
и ADDRESSES
, поддерживая контакт один-ко-многим по адресам. Места будут относительно статичными по сравнению с людьми. Этот формат позволит вам легко определить, какие места проведения мероприятий популярны, и вы сможете использовать эту информацию, чтобы в будущем получить более выгодные тарифы.
Относительно адресов для одного и того же домохозяйства: вот почему АДРЕСА - это отдельная таблица - вам не нужно перепечатывать ее для каждого человека, просто укажите правильную адресную запись.