Моделирование данных - отдельные таблицы для телефонных номеров?Много ко многим отношениям? - PullRequest
2 голосов
/ 02 февраля 2012

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

Я создаю таблицу для контактов. В настоящее время есть эти таблицы: поставщики, primarycontacts

столбцы в основных контактах выглядят так:

table contacts: id, name, vendor, phone

Теперь иногда у контакта есть несколько телефонов (сотовый, офис, дом, скайп и т. Д.), Поэтому я думал о создании другой таблицы «Телефон» со столбцами: ID, Имя и Телефон. Кроме того, некоторые контакты могут использовать один и тот же номер телефона.

Это были бы отношения многие ко многим, я прав. Многие контакты имеют общие телефонные номера, которые работают для одного и того же или разных поставщиков. W

Было бы хорошо сделать это (Таблица отдельных номеров телефонов) вместо того, чтобы в контактах имелся столбец Ph1, Ph2, Ph3? Что делать, если есть еще номера? А что, если есть только один номер телефона? Это было бы пустым пространством. Должен ли я иметь только идентификатор и номер телефона в таблице телефонов или также иметь идентификатор, номер_телефона и номер_файла?

Ответы [ 4 ]

1 голос
/ 02 февраля 2012

Было бы хорошо сделать это (Таблица отдельных номеров телефонов) вместо с контактами Ph1, Ph2, Ph3 в контактах?

Да, вам нужно создать отдельную таблицу "PhoneNumbers". Затем вы можете удалить поле «телефон» из «Контакты» все вместе.

Ваша таблица «PhoneNumbers» будет иметь два поля: contacts_id и phone_number (в виде сцепленного ключа). Это позволит вашему дизайну быть достаточно гибким, чтобы у контактов было несколько телефонных номеров.

1 голос
/ 02 февраля 2012

Это зависит от вашего проекта, но идея многих для многих не имеет смысла, когда это личная информация. Подумайте о том, что происходит, когда кто-то редактирует номер телефона. Теперь все другие пользователи, использующие это, изменили информацию, даже если они не хотят и не знают об этом.

Попробуйте что-то вроде:

table phones: id, contact_id, phone
table contacts id, user_id, firstname, lastname etc.
0 голосов
/ 18 марта 2012

это может быть старый пост, но если кто-то его читает ...

у вас есть контакты, продавцы и телефон. Контакты могут работать у одного поставщика, и, возможно, некоторые контакты используют один и тот же номер телефона.

Я бы просто создал 3 таблицы:

contacts: 
    id, name, vendor_id, phone_id
vendors: 
    id, vendor
phone: 
    id, phone

На самом деле отношения между этими таблицами довольно просты ...

0 голосов
/ 02 февраля 2012

Вы можете установить отношения «многие ко многим», но, как говорит Брайс, вы должны знать, что изменения в номере телефона могут повлиять на несколько контактов. Если вы можете гарантировать, что вы делаете только вставки и не обновляете таблицу телефонных номеров, все будет в порядке. Чтобы управлять этими отношениями, вы должны выполнять вставки, обновления и удаления в таблицу сопоставлений.

У тебя будет три стола. Contact, Phone_Number и Contact_Phone_Number. Contact_Phone_Number будет просто иметь идентификатор контакта и номер телефона. Это дало бы вам отношения многие ко многим.

Чтобы использовать это, например, если пользователь меняет свой номер, удалите сопоставление между номером и контактом в Contact_Phone_Number и настройте новое сопоставление. Если номер новый, вы должны вставить в Phone_Number. Если он уже существует, просто сопоставьте его с существующей записью номера телефона.

Преимущество этого заключается в том, что теперь намного проще запрашивать, какие контакты имеют общие телефонные номера, поскольку на логический номер телефона имеется только одна запись. Решение зависит от того, как вы хотите использовать данные.

...