2013-03-05 1 views
0

Иногда необходимо иметь несколько значений в одном поле переменной или базы данных, хотя это нарушает принципы реляционной нормализации. В python и других языках, поддерживающих списки, это легко. В других это не так. См. insert multiple values in single attributeКак вы помещаете несколько значений в одну переменную или поле без использования списка и затем разбора?

Один общий метод заключается в объединении значений в строку с разделителями-запятыми: «1,2,3» или «английский, французский, испанский», а затем извлечение значений путем синтаксического анализа.

Если действительные значения взяты из перечисленного списка, существует ли другой способ, который не требует синтаксического анализа?

ответ

1

Да. Используйте простые числа, умножьте их вместе, а затем разложите их.

  1. Тип поля для использования является целым числом или большим числом

  2. значения использования кода, которые являются простыми числами
    • 3 == Английский
    • 5 == Французский
    • 7 == Испанский
    • 11 == Итальянский

  3. Сохраните продукт, который применяется в поле.
    • 21 == английский и испанский
    • 385 == французский, испанский и итальянский

  4. Использование по модулю функции, чтобы определить, какие значения в поле

    if (field % 3 == 0) { english() ;} 
    if ! (field % 5) { french() ;} 
    =IF(NOT(MOD(A203,5)),"French","") 
    


  5. То же значение может быть ap груша несколько раз
    • 9 == английский, английский

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

  • 3 == Время
  • 5 длина ==
  • 7 == масса
  • 11 == заряда
  • 13 == температуры
  • 17 == моль

Например, рычаг рычага «первого момента» будет иметь размерное значение 35 == масса * длины. Чтобы сохранить дробные размеры в целых числах, я умножил дробные размеры на произведение всех из них и обработал его при обработке.

  • 255255 == 3 * 5 * 7 * 11 * 13 * 17
  • сила == масса * длина/(второй^2)
  • сила == (7 * 5/(3 * 3)) * 255255 * 255255
  • сила == 253381002875

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

Просьба не запрашивать код для извлечения дробных размеров. Все это было 40 лет назад в APL/360.

0

Если вам не нужно указывать несколько значений одного и того же значения, вы можете использовать бит-карту. В зависимости от того, есть ли до 8, 16, 32, 64 или 128 допустимых значений, они могут вписываться в целое число 1, 2, 4, 8 или 16 байтов.