Где номера телефонов принадлежат модели базы данных? - PullRequest
0 голосов
/ 18 апреля 2011

Учитывая схему магазина проката DVD, должны ли телефонные номера клиентов принадлежать таблице адресов или таблице пользователей и почему? Есть ли какие-либо преимущества, связанные с одним или другим подходом?

Ответы [ 7 ]

4 голосов
/ 18 апреля 2011

Почему у вас даже есть таблица адресов (если вы не хотите иметь более одного адреса для данного клиента)?

Ваш основной "клиент" - это клиент.Вы не арендуете DVD по адресу, вы сдаете их человеку.Вы не можете взять участок земли в суд, когда его обитатель сбежит с вашей любимой трилогией «Free Willy».

В мире, где человек живет только в одном месте, адрес будет частьютаблицы клиентов (как и телефон в сценарии «один телефон на одного клиента»).

Если вам нужно несколько адресов, это нормально, есть отдельная таблица адресов, связывающая эти адреса с клиентом.

Но у вас, вероятно, также должна быть похожая настройка для телефонов.Либо разрешите использовать до N телефонных номеров на одного клиента (с N столбцами) в таблице клиентов, либо (что намного лучше) иметь отдельную таблицу телефонов, позволяющую использовать любое количество телефонных номеров на одного клиента.

Что-то вроде:

customers:
    cust_id
    cust_stuff
addresses:
    cust_id references customers(cust_id)
    addr_seq_num
    addr_stuff
phones:
    cust_id references customers(cust_id)
    phon_seq_num
    phon_stuff
2 голосов
/ 18 апреля 2011

Основные случаи информационного моделирования:

Случай А. Каждый клиент может иметь более одного номера телефона. В этом случае номер телефона принадлежит отдельной таблице.

Дело А1. Это не тот случай, когда клиент обязан иметь номер телефона. то есть "отношение" - это от 1-1 до 0-n (т.е. при условии, что весь номер телефона всегда должен быть "для" какого-либо клиента). Ничего не поделаешь.

Дело А2. Это случай, когда каждому клиенту действительно требуется , чтобы иметь номер телефона. Вы можете смоделировать это как отношение, которое является 1-1 к 1-n, но "1" части 1-n очень трудно обеспечить в системах SQL (и в самой дешевой из них, наверное просто невозможно). Это не означает, что вы не должны надлежащим образом документировать бизнес-правило в том виде, в каком оно есть.

Случай В. Каждый клиент имеет НАИБОЛЕЕ один номер телефона.

Дело B1. Каждый клиент обязан иметь номер телефона. Это означает, что у каждого клиента всегда есть точно один номер телефона. Номер телефона лучше всего указывать в таблице клиентов. (Обратите внимание, что «иметь номер телефона» означает «иметь номер телефона, который известен магазину!)

Дело B2. Клиенту не обязательно иметь номер телефона. В формальной теории отношений требуется определить отдельную таблицу, в которой будут храниться только известные телефонные номера. В неформальных методах моделирования, таких как ER и UML, вы можете смоделировать это как «необязательный атрибут». В системах SQL многие могут определить для этого атрибут, допускающий значение NULL.

Что касается «телефонных номеров,« принадлежащих »адресам»: существует ли какая-либо «связь» между телефонными номерами и адресами, которая имеет отношение к вашему бизнесу? Я имею в виду, скажем, у одного клиента есть два адреса и два телефонных номера. Важно ли знать, какой из этих двух телефонных номеров принадлежит какому-либо из этих двух адресов? К какому адресу будет принадлежать номер мобильного телефона?

2 голосов
/ 18 апреля 2011

На этот вопрос нет единственно правильного ответа, кроме как сказать «все зависит».

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

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

1 голос
/ 28 сентября 2011

У нескольких клиентов может быть один и тот же номер телефона: возможно, у вас покупают несколько человек из одного здания.

Что происходит, когда вы обновляете номер телефона для одного клиента; должен ли он обновить этот номер для других людей, которые предположительно разделяют этот номер?

  • Да, если адрес для обеих сторон все тот же (но это может нарушить некоторые законы о конфиденциальности).
  • Нет, если теперь есть два разных адреса.
1 голос
/ 18 апреля 2011

Как известно, контактную информацию сложно смоделировать в реляционной схеме. Чтобы сохранить ваше здравомыслие, я бы посоветовал вам сделать минимальное количество предположений относительно телефонных номеров. Допускается использование нескольких телефонных номеров для одного клиента / учетной записи; кроме того, трудно применять правила к телефонным номерам.

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

1 голос
/ 18 апреля 2011

Что вы подразумеваете под "традиционным"?Поскольку пользователь может иметь произвольно большое количество контактных телефонных номеров (домашний, рабочий, личный мобильный, рабочий мобильный, факс и т. Д.), Создается впечатление, что должна существовать отдельная таблица телефонных номеров, каждая строка которой содержит номер изначение, которое говорит, что это за число.

1 голос
/ 18 апреля 2011

Просто предположение о вашем сайте / приложении, но обычно я бы сказал «Адреса», потому что пользовательская информация, как правило, представляет собой информацию, которую вы часто используете для запуска сайта (идентификатор, имя пользователя, посещения и т. Д.), Тогда как номер телефона может не быть?

...