some modules structure optimization
added cached_property decorator
use lowered model name as table name by default