Дизайн базы данных - нужно руководство

Я, вероятно, делаю это неправильно, но здесь это идет.

Я пытаюсь построить что-то вроде очень простой CRM. Я знаю, что их много, но на самом деле я хочу чему-то научиться. Я попытался найти готовые примеры для этого конкретного сценария, но все, что я нашел, это теоретические и упрощенные примеры, которые я не могу использовать.

Я могу сделать эту диаграмму более упрощенной, но в этом случае у меня будут пустые ячейки, так что в принципе я в курсе этого:)

Требования:

  • С некоторыми компаниями никогда не связывались прежде. Вот почему я создал две дополнительные таблицы contact_emails, company_emails, contact_phones, company_phones,

  • Связанная компания может назначить контакт (лицо).

  • Человек может иметь телефоны и электронную почту.

  • Один человек может быть назначен на несколько компаний

  • Одна компания может иметь несколько человек

Диаграмма:

схема]

Вопросы:

  • Я на правильном пути?
  • Что можно улучшить и как?

1 ответ

Вы не делаете это неправильно... много.;)

Ваше требование, что один человек может быть назначен нескольким компаниям, не реализовано в проекте. Чтобы включить это, удалите company_id из контактов и добавьте:

company_contacts (company_id PK/FK, contact_id PK/FK)

В contact_phonesЯ бы переименовал company_phones_id столбец к phone_id, чтобы соответствовать соглашению об именах, используемому в остальной части проекта.

Правильно ли, что у компании может быть только один телефон и электронная почта, кроме как через контакты? Если нет, проверьте показатели кардинальности по отношениям между companies а также company_emails / company_phones, Если это правильно, вы могли бы (я не говорю, должен) заменить company_emails а также company_phones таблицы с email_id а также phone_id колонны в компаниях.

Помимо этих проблем, схема выглядит приемлемой.

Есть еще одна поправка, которую я мог бы рассмотреть. Добавление супертипа для компаний и контактов (мы могли бы назвать их сторонами) позволит вам объединить company_phones а также contact_phones таблицы, а также company_emails а также contact_emails столы:

parties (id PK)
contacts (party_id PK/FK, name, surname)
companies (party_id PK/FK, company_name, ...)
party_phones (party_id PK/FK, phone_id PK/FK)
party_emails (party_id PK/FK, email_id PK/FK)

Тем не менее, в этом случае вы не можете установить разные кардинальности для компании и контактных телефонов / адресов электронной почты в базе данных.

Другие вопросы по тегам