Oracle. Как не нужно генерировать первичный ключ

Идея поста возникал при прочтении Получение в программе значения первичного ключа после INSERT.

В Oracle младше 12 версии нет автоинкрементного поля. Стандратный способ генерации первичных ключей — последовательности. Но иногда разработчики генерируют первичный ключ таким способом:

Это приводит к проблемам при многопользовательской работе. Типичная ситуация — пользователи одновременно получают новое значение для ПК, а потом вставляют записи:

Пользователь1Пользователь2
select max(rid) + 1 from table
select max(rid) + 1 from table
insert
insert

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

Пользователь1Пользователь2
select max(rid) + 1 from table
select max(rid) + 1 from table
insert
insert
commit
ORA-00001: нарушено ограничение уникальности

Для генерации ПК следует использовать последовательности или специальные механизмы вроде GUID. Иначе будут возникать ошибки.

Математика с нуля

Математика с нуля

Сайт Математика с нуля содержит уроки базовой математики — на уровне начальной и средней школы.

Этот сайт примечателен детальностью подачи материала. Каждая тема рассматривается на нескольких примерах. В конце каждой темы десяток задач для самостоятельного решения.

Сейчас на сайте 63 урока. Периодически добавляются новые.

Пиши, сокращай. Отжать воду

Первая часть книги Пиши, сокращай описывает как очистить текст от лишних слов — стоп-слов. Стоп-слова не несут информации и затрудняют чтение. Общий алгоритм работы со стоп-словами:

  1. Выучить группы стоп-слов. Разобраться почему они вредны.
  2. Научится видеть стоп-слова.
  3. Удалить мусор без вреда смыслу.
  4. Наполнить текст полезной информацией.

В книге стоп-слова разделены на 8 групп. Для их быстрого повторения я составил интеллект-карту:

Пиши, сокращай. Стоп-слова

Python. Имена и связывание

Пост написан на основе части 4.1 книги Intermediate Python. Obi Ike-Nwosu.

В Python, на объекты ссылаются через имена. Имена аналогичны переменным в C++ или Java.

В примере выше, x — имя которое ссылается на объект 5. Процесс присваивания ссылки на 5 в x называется связыванием. Связывание приводит к тому что имя ассоциируется с объектом.

Связывание происходит в разных ситуациях: при присваивании и при вызове методов, когда параметры связываются с аргументами.

Важная особенность: имена являются только ссылками без связанного с ними типа; имена ссылаются на объекты которые имеют тип.

Присваивание создаёт новое имя в самой внутренней области видимости программы. Если присваивание выполняется в коде модуля — имя добавляется в глобальные переменные модуля, если в коде функции — в локальные переменные функции.

Python. Выражение, строки и отступы

Пост написан на основе части 3.2 книги Intermediate Python. Obi Ike-Nwosu.

Программа на Python состоит из логических строк ограниченных токеном NEWLINE. Каждая логическая строка эквивалентна простому оператору. Составные операторы формируются из нескольких логических строк.

Логическая строка создаётся из одной или нескольких физических строк используя явные или не явные правила объединения строк. Физическая строка — это последовательность символов завершающаяся символами перевода строки (end-of-line sequence). Python неявно рассматривает физические строки как логические, устраняя необходимость в точке с запятой для разделения выражений. Однако точка с запятой может использоваться для разделения одной физической строки на несколько логических:

Читать далее Python. Выражение, строки и отступы

Воспроизводимость задач

Задачи часто повторяются. Одни часто, другие очень редко. Одни в том же виде, другие с изменениями. Но так или иначе задачи повторяются. Эффективность работы повышается если выполнять задачи воспроизводимо.

Выполнять задачу воспроизводимо означает думать при выполнении задачи не только о том чтобы её выполнить, а о том как выполнить её так чтобы её было проще и быстрее выполнить в следующий раз. В идеальном случае сделать задачу так чтобы повторять не пришлось, но это уже исключение.

Воспроизводимость подразумевает

  • Декомпозицию задач
  • Создание артефактов, которые помогут в следующий раз

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

Читать далее Воспроизводимость задач