First of all, I've searched through the existing posts looking for this a number of different ways and can't seem to find it. If you know where the answer already exists, please redirect! Thanks!

Note: Much of this is directly related to the DAO

I'm attempting to write my first app using the MVC design pattern, and am having difficulty modeling my data. In order to normalize my database, I've spread user data across the following tables:

Code:
mysql> TABLE users;
+-------+-------+--------+--------+-----+----+----------+-------------+
|user_id|auth_id|username|password|first|last|date_added|date_modified|
+-------+-------+--------+--------+-----+----+----------+-------------+

mysql> TABLE authorizations
+-------+---------+
|auth_id|auth_name|
+-------+---------+

mysql> TABLE ip_addresses
+-----+----------+
|ip_id|ip_address|
+-----+----------+

mysql> TABLE user_ips
+-----+-------+-----+
|ui_id|user_id|ip_id|
+-----+-------+-----+

mysql> TABLE groups
+--------+----------+---------+
|group_id|group_name|directory|
+--------+----------+---------+

mysql> TABLE user_groups
+-----+-------+--------+
|ug_id|user_id|group_id|
+-----+-------+--------+
Now, as I understand things, there should be a DAO for each table in the database, right? Wouldn't that be overkill? If so, and I use only a single "user_DAO", almost all of my stored queries are going to use long/complicated joins. However, if I do use a seperate DAO/model for every table, how would I set things up?

PHP Code:
/** Note:
 * The models are passed the database connection and instanciate their own appropriate DAO
 */
class UserController extends Controller {
    
// ??????????
    
var $ip;
    var 
$group;

    function 
UserController(&$dbc) {
        
$this->model =& new UserModel($dbc);
        
$this->view =& new UserView();
        
// ??????????
        
$this->ip =& new ipController($dbc);
        
$this->group =& new GroupController($dbc);
    }

    function 
getUser($id$view='list');
        
$user $this->model->getUser($id);
        
// then what about ip and groups info?
        
$ip $this->ip->getIPbyUser($user['id']);
        
$group $this->group->getGroupByUser($user['id']);
        return 
$this->view->getView($user$ip$group$view);
    }

    
// etc...


Also, how do I avoid this redundancy:

PHP Code:
// Controller
function getUser($id) {
    
$this->model->getUser($id);
    
// ...

// Model
function getUser($id) {
    
$this->dao->getUser($id);
    
// ...

// DAO
function getUser($id);
    
// ... 
Thanks in advance for your help!

Peace,
texdc