Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
ОРМ (ну или у кого там что в зависимости от парадигмы), должна быть гибкой и позволять безболезнено сменить используемую БД на любом этапе разработки. Звучит конечно утопично, но имхо в будущем так и будет
но имхо в будущем так и будет
File.read("content/#{id}")
File.open("content/#{id}", "w") {|f| f.write data}
$fh = fopen("content/".$id, 'w');
fwrite($fh, $data);
fclose($fh);
file_put_contents("content/{$id}", serialize($content));
$content = unserialize(file_get_contents("content/{$id}"));
Это нормальная тенденция в развитии технологий — по накоплению определенного стэка знаний, происходит разделение на более узкие специальности.
Сейчас ни Mongo, ни CouchDB могут гарантировать лишь атомарность единичной операции.
Если же, например, у вас онлайн игра, где предмет передается от 1 персонажа другому, то ни одно NoSQL решение не может гарантировать что у вас исключена ситуация, когда предмет отобран от персонажа А, но не пришел к персонажу Б.
MongoDB supports atomic operations on single documents.
Когда лучше определиться с моделью данных? Когда вы знаете, какие есть объекты данных, как они связаны и как они используются. Когда вы это узнаете? Когда все сценарии использования и бизнес правила записаны и проверенны.
Строка в БД
data::$structure['tovar']['table'] = 'tovar';
$structure = new dummyArray();
$column = new dummyArray();
$column->name = 'id';
$column->desc = 'Номер';
$column->type = 'auto';
$column->default = 'Автомат';
$structure->id = $column;
$column = new dummyArray();
$column->name = 'name';
$column->desc = 'Название';
$column->type = 'string';
$column->default = '';
$structure->name = $column;
$column = new dummyArray();
$column->name = 'cat';
$column->desc = 'Категория';
$column->type = 'select';
$column->option = array('free'=>'Бесплатный','profi'=>'Профессиональный','none'=>'Никакой :)');
$column->default = '';
$structure->cat = $column;
$column = new dummyArray();
$column->name = 'desc';
$column->desc = 'Описание';
$column->type = 'text';
$column->default = '';
$structure->desc = $column;
data::$structure['soft']['structure'] = $structure;
data::$structure['soft']['subtable'] = 'comment,photo,pricelist';
data::$structure['soft']['access']['create'] = 'manager';
data::$structure['soft']['access']['read'] = '*';
data::$structure['soft']['access']['update'] = 'manager';
data::$structure['soft']['access']['create'] = 'admin';
наследованием да, лажа пока
даже слишком хорошо, коррелирует с ООП-подходом
Способы взаимодействия с объектом (то есть т.н. методы) в реляционных СУБД вообще нереализуемыА там надо что-то сложнее геттеров и сеттеров, т.е. процедур и функций, в которых все аргументы — примитивного, а не объектного типа? А то потом возникает проблема, к какому объекту отнести метод — типа перевода со счёта на счёт — к тому куда переводят, к тому с которого переводят или вообще к сумме (валюта + количество)? Так постепенно логика выносится в «менеджеры» с методом
перевестиСумму(Сумма сумма, Счёт с, Счёт на), они же «визиторы» (если по глупости уcпели создать метод (Счёт с).перевестиСуммуНа(Сумма сумма, Счёт на) или (Счёт на).пополнитьСоСчёта(Сумма сумма, Счёт счёт) или (Сумма сумма).перевести(Счёт с, Счёт на) в одном из классов-участников). Если логику «менеджеров» приходится менять, то «менеджеры» «объинтерфейсиваются», чтоб можно было легко менять реализацию.Хранение данных об 1 объекте в десятках таблиц, с использованием промежуточных и т.д. — это никак не похоже на ООП-подход, когда объект инкапсулируется внутри себя.Хранение данных об одном объекте в десятках классов со сложным управлением обратными сссылками — это сильно проще (на счёт инкапсуляции см. в т.ч. выше про «методы»)?
Наследование данных1) Через constraints и FK (ну да, придётся ещё триггер на вставку делать) 2) В PostfreSQL и так есть.
ПолиморфизмЭто, в общем, заимствование из функциональных языков программирования. Изврат на тему косвенного вызова функции — типа вызва функции в С по указателю, только безопаснее. Если нужно, можно нагородить что-то типа CLOS, но по отношению к «персистнутым» в БД данным.
Не БД