2011-06-04 4 views
1

Я хочу знать, что лучше.Больше столбцов с меньшим количеством данных или меньше столбцов с большим количеством данных?

  1. сохранить все данные (например, Skype, ICQ, facebook, StackOverflow, и т.д., и т.д., и т.д.) профили в одном столбце
  2. Сохранение данных в разделенных колонках (разделенных колонки для Skype, ICQ, facebook, StackOverflow, и т. д.)

Что лучше и легко для сервера mysql?

+1

Как выглядят ваши данные? Что имеет смысл с точки зрения отношений? Это зависит от структуры ваших данных. – tjameson

ответ

4

Сохранение их всех в одной колонке будет нарушать first normal form и сделать запрос и агрегирование данных очень сложными.

Используйте один столбец для хранения каждой информации.

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

+0

Хороший общий совет. SQL довольно эффективен, если ваши запросы эффективны. – tjameson

+0

ОК. забыл о проблемах восстановления, я прошу только выбрать случай. Если sql имеет меньше столбцов для поиска, у него меньше чтения с жесткого диска. – genesis

+0

@genesis - Не обязательно. Это зависит от количества столбцов и размеров столбцов.Вы находитесь на этапе проектирования своей базы данных - вы делаете преждевременную оптимизацию (если она даже оптимизирована). – Oded

1

При использовании нескольких столбцов вы получите гораздо большую гибкость.

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

2

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

  1. Хотите запросить конкретные аккаунты? Например, найдите все учетные записи Skype или найдите конкретную учетную запись Skype. Из ваших двух подходов, что делает это проще?

  2. Какой подход, по вашему мнению, будет легче исправить, если возникла проблема с хранением одного из типов учетных записей?

  3. Какой подход, по вашему мнению, будет проще расширить типы учетных записей? Например, сегодня вы создаете Skype, ICQ, Facebook и StackOverflow. Завтра вы понимаете, что хотите хранить учетные записи Twitter. Какой подход, по вашему мнению, сделает это проще?

  4. Какой подход, по вашему мнению, будет проще для другого разработчика, чтобы понять, поддерживать и расширять? Например, ваша система становится настолько популярной, что вы нанимаете разработчиков, чтобы взять на себя вашу работу. Другим разработчикам будет легче понять подход, который больше соответствует отраслевым передовым практикам.

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

+0

1. Я не буду искать в этой колонке. 2. Вы имеете в виду в случае сбоя сервера/таблицы? 3. Да, это правда. Все, что вы сказали здесь, верно, но теперь я ДЕЙСТВИТЕЛЬНО ХОТЕЛСЯ ПОЛУЧИТЬ ПРАВЫЙ ОТВЕТ, это означает, ЧТО ЛУЧШЕ ДЛЯ СЕРВЕРА, а не для меня. Так ? Однако спасибо за ответ – genesis

+0

@genesis - RE: # 2. Не крушение. Предположим, что существует ошибка в том, как вы храните информацию, которую вы обнаруживаете после того, как система переходит в производство, или есть исправление, необходимое для хранения информации. – Thomas

+0

вы имеете в виду, что мне нужно будет сбросить все ICQ, но сохранить данные в Skype, что было бы невозможно. Я прав? – genesis

Смежные вопросы