Перейти к содержимому


Что продуктивнее?


Сообщений в теме: 11

#1 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 01 Август 2014 - 11:18

Вопрос к гуру программирования!

Что делать лучше, в одном поле несколько значений, разделенных "/" или же лучше сделать 4 поля?

Как бы как быстрее будет обрабатываться запрос, взять одно поле и разложить его на значения, или же взять 4 поля уже со значениями?

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 01 Август 2014 - 11:42

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

#3 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 01 Август 2014 - 11:51

Хорошо. Тогда такой вопрос, какой запрос потратит меньше времени на обработку, где нужно возвратить 1 поле, или где нужно возвратить 4 поля?

#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 01 Август 2014 - 12:00

Теоретически, 1 поле, хотя сомневаюсь что разница существенна. Честно говоря, меня самого этот вопрос давно волнует. Но длина и тип поля тоже может влиять. Опять же, это актуально, если вы всегда будете извлекать (а также отбирать, заполнять и т.д., т.е. производить любые операции) эти 4 поля только вместе, и никогда - по отдельности. Тогда эта связка в принципе подпадает под атомарность, и её можно поместить в одно поле. Как например в случае с ФИО - если оно всегда используется только целиком, нет смысла делить его на 3 поля.

#5 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 01 Август 2014 - 12:31

И еще один беспокоющий меня вопрос... Где быстрее будет происходить поиск, в таблице с 10 полями (даже если мы их не указываем в поиске) или же в таблице с 1 полем?..

#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 01 Август 2014 - 12:48

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

#7 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 01 Август 2014 - 12:51

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

#8 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 01 Август 2014 - 12:59

Понял. Спасибо большое!

#9 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 01 Август 2014 - 13:07

Я тут еще подумал... А что если в одном поле создать кодировку из 1 символа всех 4х полей?

Объясню. Мне нужно маркировать запись именно 4мя значениями 0/0/0/0

Каждое из этих значений имеет расшифровку и может равняться:
1. ! или 0
2. Д, С, или 0
3. * или 0
4. S, V, E и 0

Что, если всю совокупность значений объеденить, и на каждый разультат выдавать одну букву?

Например, если значения у нас равны 0/0/0/S, то тогда поле равно "А", если 0/0/0/V, тогда поле равно "Б", если 0/0/0/E тогда "С" и т. д.

Как такое решение?

#10 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 01 Август 2014 - 13:10

Тогда получается, что у нас будет 48 значений поля.... Хм... )))

И как следствие, нам надо будет где то держать таблицу сравнений, что же значит то или иное значение из 48 )))

Сообщение отредактировал dolphin: 01 Август 2014 - 13:18


#11 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 01 Август 2014 - 13:21

Друзья, а что "лучше"? Оставлять поле пустым "" или же заполнять его нуликом "0"?

#12 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 01 Август 2014 - 13:33

Без разницы, имхо. Определяется чисто исходя из логики данных.





Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных