Rien ne t'empêche de faire une route sans les ID avec CakePHP ;). Un truc du genre :
Router::connect('/:category/:slug',
array(
'controller' => 'posts',
'action' => 'index'
),
array(
'pass' => array('category', 'slug'),
'category' => '[a-zA-Z0-9]+',
'slug' => '[a-zA-Z0-9]+'
)
);
En BDD ton slug sera le slug du titre de l'article ;).