Какая PHP ORM умеет работать с естественными ключами без автоинкрементных ID?
Во многих случаях с точки зрения реляционной модели синтетические автоинкрементные ID - ересь. Например в таблице книг первичным ключом естественно использовать ISBN, в таблицах языков/стран/валют и т.п. - ISO-коды, на многие сущнтсти для которых нет стандартов может быть удобно придумать свой "стандарт" удобных человеко-читаемых идентификаторов дабы сохранить возможность удобно проворачивать сложные операции над данными посредством SQL. Кроме этого не редко наиболее логичным идентификатором записи является составной ключ. В других языках есть ORM, вполне подходящие для работы с такими случаями, например та же Entity Framework для .Net. А есть ли подобные ORM для PHP?
ISBN, ISO и составные ключи действительно очень логичны. Например модификация машины уникальна по составному ключу из производителя, модели, поколения и комплектации. Причем модель то в своё время уникальна по производителю и названию, а производитель по своему названию. То есть все ключи строковые. Ну логично же, что 2й BMW не может быть, зачем тут автоинкремент? Представьте что будет в комплектации, когда до ней дойдут все эти FK. А теперь представьте, что у вас пользователь хочет добавить в виртуальном гараже свою машину. Ну и каша...
Так что автоинкремент может и не логичен для человека, но в реляционных БД вещь незаменимая.
Doctrine например, а вообще практически каждый PHP фреймворк имеет свою реализацию. Автоинкримент задается на уровне БД (в mysql по крайней мере), просто внесите изменения в структуру таблицы. По поводу использования ISBN и т.д. в качестве первичного ключа: в mysql рекомендуется использовать числовые типы для данных полей т.к. индексы в этом случае работают быстрее (грубо говоря: поиск по ассоциативному массиву работает медленнее, больший объем накладных данных).
Вопрос не в актоинкременте как таковом а в том, чтобы использовать именно НЕчисловые типы и хрен с ней с производительностью. У меня проект в котором таблицы на несколько сот записей максимум, меньше ста запросов в день и главное, что от них требуется - это удобство работы с ними в любой форме, человеко-читаемость, нормализация и строгое отделение данных от техничеой части.
Дмитрий Энтелис: Создать в БД никто не мешает, я вот спрашиваю в какой ORM на PHP с этим будет удобнее работать. Я вообще с PHP знаком мельком и мне как-то казалось, что виденные мной ORM основаны именно на идее целочисленного автоинкрементного ID.