Чтобы поднять уровень абстракции в коде, его сперва надо поднять в базе.
Ну вот самое тупое - откуда взять перевод закодированных имен полей на человеческий, для интерфейса? Есть такой изврат - пихать гуманные имена в каменты поля. Это не нормально, поскольку хак. Можно и сразу на гуманном, однако не все можно и все равно придется переводить с гуманного на другой гуманный в случае интернационализации. В модельку, ясень пень прописать, короче. Чпок и уровень абстракции, типа, подскочил.
$tb = new Table($table);
Что может узнать таблица про самое себя? Довольно много. Таблица может добавить в себя объекты поле. Объект поле знает про себя вполне достаточно, чтобы обеспечить нормальный интерфейс I/O (ввод/вывод) с валидацией и обеспечить нормальное представление себя в любом виде. Таблица знает где у нее pk, где uni, где a_i, где mul и все остальные ключи, каковые имеются. Таблица может построить составной ключ при отсутствии перечисленных.
Это все имеется нормально, в пределах любой изолированной таблицы. Вполне нормально таблица может быть и сгенерирована полностью, а не на базе базы.
Так вот, снабдив эту одинокую таблицу таблицей перевода идентификаторов, таблицей отношений, таблицей правил и так далее - вы получите несусветный уровень абстракции из самого простого запроса
$tb = new Table($table);