Уже не новый, но оттого не ставший хуже перевод большой статьи, объясняющей, как работают реляционные базы данных. Рекомендую всем, кто хочет перестать использовать MySQL или PostgreSQL вслепую и всё-таки попытаться понять, что там внутри.
Все заметки с тегом «database»
-
Как работает реляционная БД
24 марта 2016
-
Как хранить упорядоченный список в базе данных
15 февраля 2015
Время от времени мне прилетают в почту занятные вопросы. Последний про хранение упорядоченного списка в базе данных.
Имеется возможность загрузки фото в альбомы. Нужно реализовать возможность упорядочивать фото в пределах альбома. Автор уже хранит порядок в поле
order
, но его напрягает, что при перетаскивании какой-либо из картинок нужно обновлятьorder
у фотографий всего альбома.Для начала, стоит оценить частоту изменений порядка фото. Если операция не очень частая и выполняется, например, только админом раз в день и в альбомах не очень много фото, можно смело хранить
order
какinteger
и обновлять, как автор и делает.Если же операция достаточно частая, можно схитрить и хранить
order
какdecimal
. В этом случае при вставке или перемещении фото между двумя другими необходимо обновить толькоorder
непосредственно перемещаемой записи.Если мы перемещаем фото
C
и засовываем его между фотоA
и фотоB
, то значениеorder
для него вычисляется какC.order = A.order + (B.order - A.order) / 2;
UPD: из за ограничений точности следует проверять, влезет ли в базу очередное значение. Если нет — пересчитывать
order
. Даже несмотря на то, что от пересчётов мы не избавились, их частота сократилась для худшего случая на порядок. -
Yii: читаем пустые значения как null
7 мая 2011
Для того, чтобы Yii читал пустые значения как
null
, а не как пустую строку достаточно добавить один параметр в конфигурацию компонентаdb
:'db'=>array( 'connectionString' => 'mysql:host=localhost;dbname=test', 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'nullConversion' => PDO::NULL_EMPTY_STRING, ),