Это зависит только от того, что вы планируете делать с этими полями. Я склоняюсь к тому, чтобы в отсутствие дополнительной информации поместить их в одну таблицу.
У вас будут некоторые пуристы, которые скажут, что адрес электронной почты — это не то же самое, что номер телефона, поэтому использование одного и того же поля для хранения обоих — преступление против природы.
Я согласен с таким типом мышления, когда то, что вы делаете с двумя полями, отличается. Например, если бы кто-то сказал, что иногда это поле содержит номер телефона, а иногда — сумму транзакции, и когда мы вычисляем общий баланс, мы складываем все те, которые являются суммами транзакций, но игнорируем те, которые являются телефонными номерами, я бы заплакал. .
Но такого рода рассуждения могут быть доведены до нелепых крайностей. Вопрос на самом деле не в том, различны ли две вещи в реальном мире, а в том, различны ли они для целей нашей системы. Например, я не могу себе представить, что, потому что иногда адрес — это почтовый ящик, а иногда это улица, а иногда это номер квартиры и т. д., что у нас должны быть отдельные поля для каждой из этих вещей, а не просто «адресная строка 1». " и "адресная строка 2". Или что у нас должны быть отдельные поля для «имени шатенки» и «имени блондина», потому что, эй, они выглядят по-разному. что касается, все является "товаром", а пользователь говорит нет, нет, как вы можете говорить, что мебель - это то же самое, что и канцелярские товары? Но если мы делаем в системе запись названия, количества в наличии и цены , чем меня не волнует разница.
Действительно, одним из моих самых гордых моментов в разработке программного обеспечения было то, когда я понял, что две вещи, которые отличаются в реальном мире, на самом деле одинаковы для системы и могут быть обработаны одной таблицей или одним блоком кода вместо многих. Где-то в процессе я понял, что у сотрудников, продавцов и клиентов есть имена, адреса, номера телефонов и адреса электронной почты. Итак, вместо того, чтобы иметь все эти поля в таблице сотрудников, все те же поля в таблице поставщиков и снова все те же поля в таблице клиентов, я создаю одно поле, которое я называю «человек», и помещаю туда все общие вещи. , а затем просто ссылайтесь на него из других таблиц. Поэтому, когда кто-то приходит и говорит, что теперь мы должны обрабатывать внешние адреса, я меняю одну таблицу вместо трех и, если бы я был умным, одну функцию форматирования адресов вместо трех.
В таком случае, что вы собираетесь делать с телефонными номерами и адресами электронной почты? Вероятно, в основном пользователи вводят их, а затем отображают. Я легко могу представить себе систему, в которой вы даже не будете проверять, что есть что. Во время ввода данных есть раскрывающийся список для «типа контактной информации», а во время отображения вы отображаете тип контакта вместе со значением контакта, возможно, отсортированным по типу контакта. Если вы отправляете автоматические электронные письма, возможно, вы выбираете, где type='email'.
Теперь, если вы выполняете соединения из этой таблицы с другой таблицей, используя адрес электронной почты в качестве поля соединения, это будет по-другому, потому что тогда половина ваших данных не имеет смысла.
Кстати, если вы используете одну таблицу, вам нужен код, чтобы указать, какой это тип контакта. Я думаю, вы понимаете это. Я предлагаю вам создать справочную таблицу, содержащую коды и их определения, например, создать таблицу contact_type (первичный ключ contact_type_code char(2), contact_type_description varchar(40)), а не жестко кодировать типы контактов в программе. Или, что еще хуже, помещая описание типа контакта в каждую запись, поэтому иногда он говорит «электронная почта», а иногда «электронная почта», иногда «электронная почта» и, возможно, иногда «электронная почта» или «интернет». .
Извините за длинный бессвязный ответ.
person
Jay
schedule
15.01.2014