Яков Сироткин (yakov_sirotkin) wrote,
Яков Сироткин
yakov_sirotkin

Тонкости взаимоотношений с базами данных

В принципе теория и практика построения баз данных широко известны, но мне хотелось бы заострить внимание на двух особенностях на примере Java и Oracle.

Внутри Java многие часто используют тип int для представления NUMBER из Oracle. Но int может доходить до 2 миллиардов, а NUMBER может быть на много порядков больше. Да, большинство проектов никогда не доживут до миллионной записи, не то что до миллиардной, но, тем не менее, два миллиарда — вполне обозримое число, поэтому я всегда использую long вместо int в таких случаях, благо не сильно накладно. Проблема в том, что NUMBER может быть больше long, и если подходить к вопросу абсолютно строго, то надо всюду использовать BigDecimal, как в JSP. Но вот BigDecimal — отнюдь не примитивный тип, его использование чревато и усложнением кода, и потерей производительности. По-моему, числа больше MAX_LONG слишком экзотичны, чтобы идти на такие жертвы.


Java не вводит никаких ограничений на длину строк на уровне языка, через POST тоже можно передать любые значения параметров. Но в Oracle стандартные строки не могут превышать 4000 символов. Да, CLOB уже заведомо хватает, но работа с CLOB — это много, много тяжелее, чем с BigDecimal. На практике все, конечно, используют обычные строки, ставя по возможности разумные достаточные лимиты, вроде «название улицы не больше 50 символов». Теоретически, можно везде проверять максимальную длину поля, выдавать пользователю соответствующие ошибки и так далее. На практике этим просто не занимаются, потому что не нужно: да, формально баги есть, но пользователи их не воспроизводят.
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 13 comments