Предложение по дизайну базы данных управления контактами - PullRequest
0 голосов
/ 02 мая 2018

В настоящее время я разрабатываю базу данных управления контактами для торговой палаты. Цель базы данных - хранить все человек (кроме нашего собственного персонала), все зарегистрированные компании (обычные компании и члены палаты), адреса лица и компаний: задач , за которые сотрудники в настоящее время отвечают, список наших сотрудников ( пользователь ) и ролей в камере.


Бизнес-правила

  • один person работает на одного company
  • один company есть несколько person
  • person и company могут иметь несколько address
  • один company может быть кратным industry
  • один industry может иметь несколько company
  • один company может иметь несколько membertype
  • один membertype может иметь несколько company
  • один user может играть несколько role
  • one role может быть назначено для mutliple user
  • один user может иметь несколько task
  • один task может обрабатываться несколькими user
  • один task может предназначаться для нескольких person
  • один person может быть целью нескольких task
  • один person может быть добавлен только одним user
  • один user можно добавить несколько person
  • один company может иметь 0 или 1 parent_company
  • один parent_company может иметь несколько дочерних компаний

Я придумал следующий дизайн, и он претерпел некоторые изменения:

enter image description here

Выпуск

  • Существуют ли лучшие способы отображения отношения user-task-person?
  • Например, если person может иметь только один email, но может иметь несколько tel, я должен создать дополнительную таблицу только для tel, пока email все еще находится в таблице person? Будет ли это считаться "нечистым"?
  • Для таблицы membertype должны ли company_id и typename быть оба PK?
  • Как эта схема выглядит сейчас? Есть еще какие-нибудь нормализации, которые нужно сделать?

Я новичок в базе данных, определенно есть некоторые недостатки или ошибки в дизайне, было бы неплохо, если бы вы, ребята, могли бы дать мне несколько советов, чтобы я мог исправить и улучшить этот дизайн. Спасибо ^ ~ ^

1 Ответ

0 голосов
/ 02 мая 2018

Основная проблема, которую я вижу, заключается в том, что хотя все первичные ключи определены как Int, некоторые внешние ключи или ссылки определены как varchar.

  1. компания в контактной таблице
  2. user_role в пользовательской таблице
  3. parent_company в компании
  4. добавлено_ в пользовательской таблице

Кроме того, role_id имеет длину 10, а все остальные первичные ключи - 11.
Лично я предпочел бы имена таблиц с большой буквы, пользователя, компании и т. Д.

Обновление для отредактированной версии:

Возможно, вы захотите создать таблицу для телефона, почты, факса и т. Д., Скажем, contact_info, которая может содержать строковое поле, содержащее контактную информацию, и поле типа (электронная почта, телефон, факс и т. Д.). Таким образом, вы можете сохранить несколько телефонных номеров, например, если вы хотите ограничить адрес электронной почты одним, вы можете либо оставить его в таблице person и не разрешать его здесь, либо иметь бизнес-правило, разрешающее только одну строку электронной почты в contact_info ,

Эта таблица также может быть полезна для company, если вы хотите сохранить электронную почту или телефонные номера для company, например contact@somecompany.com или номер для коммутатора компании

Для типа члена таблицы должны ли company_id и typename быть PK?

Да

Второе обновление Об адресном решении: Если таблица address не содержит достаточно информации, чтобы сделать каждый адрес уникальным, я могу понять, что компания может иметь более одного адреса, но если разрешить двум компаниям иметь один и тот же адрес (под этим я подразумеваю одну и ту же строку в база данных), поэтому, возможно, его следует изменить на «один ко многим» с company и «адрес», но один на один в другом направлении.
Я также думаю, что было бы хорошо иметь какую-то метку в двух таблицах адресных ссылок, чтобы можно было легко идентифицировать такие адреса, как «дом», «работа», «офис», «склад» ...

...