Mappatura degli oggetti del database, buone pratiche [chiuso]

0

Penso di aver capito l'idea alla base della mappatura degli oggetti, ma c'è una lacuna nella mia base di conoscenze che spero di riempire ora. Per prima cosa lascia che ti dica cosa ho capito da tutta la faccenda.

Ho le mie tabelle del database a posto, e per ogni tabella ho una classe separata. Ogni istanza di ogni classe rappresenta una riga della tabella, ad esempio gli utenti della tabella: id, nome, password dovrebbero essere rappresentati come

class User {
    protected $id;
    protected $name;
    protected $password;
}

Che avrebbe metodi come setName, setPassword, create, save, getById e così via. Tutto questo ha molto senso per me e apporta un ottimo aspetto al codice oltre alla manutenibilità, è semplicemente fantastico, mi sono innamorato di questo modello di gestione dei dati da quando l'ho scoperto.

Tuttavia, ora voglio la cosa che non mi è chiara. Se ho una tabella che è una tabella di connessione, scusa, non so davvero quale sia il termine per questo - una tabella che mostra la connessione tra altre tabelle, come faccio a manipolare quella tabella? Lasciatemi fare un esempio perché non sono molto bravo con le spiegazioni. Supponiamo di aggiungere una tabella in cui gli utenti possano aggiungere i propri contatti, in modo semplice e semplice, niente di eccezionale per l'esempio. Nella tabella contatti gli utenti possono aggiungere altri utenti come segnalibri. Dato che quella tabella non avrebbe un PK, o probabilmente avrebbe un PK complesso, non si adatta molto bene al metodo sopra - 1 riga = 1 istanza, perché non c'è proprio modo di impostare il "contatto" oggetto nel modello mostrato sopra. Sì, potrei probabilmente fare qualcosa di simile

class Contact {
    protected $forUser;
    protected $contact;
}

Dove forUser sarebbe l'utente che è il contatto e contact sarebbe l'utente effettivo che il contatto contiene, ma come ho detto, non è molto bello e non ha perfettamente senso per me.

Il metodo che ho imparato è quello di avere metodi aggiuntivi nella classe iniziale stessa che gestiscono le tabelle di "connessione", qualcosa come

class User {
    ...

    public function addContact(\User $user){
        ...
    }
}

Potresti darmi qualche consiglio e dirmi quali sono le buone e cattive pratiche in materia?

    
posta php_nub_qq 25.02.2015 - 17:55
fonte

1 risposta

5

La tabella di connessione di cui parli è chiamata tabella di congiunzione .

Utilizzando l'esempio di Wikipedia, hanno 3 tabelle definite.

User
----
User ID
User Login
User Password
User Name

Permission
----------
Permission ID
Permission Description

UserPermission
--------------
User ID
Permission ID

Ora puoi mappare queste 3 tabelle in classi PHP.

Probabilmente sarebbe più intuitivo creare una classe con un utente e un elenco di permessi.

Per un'applicazione diversa, puoi creare una classe con un'autorizzazione e un elenco di utenti.

In un database relazionale, devi avere tabelle di giunzione per una relazione molte a molte. Non è necessario creare una classe PHP per la tabella di giunzione.

    
risposta data 25.02.2015 - 23:19
fonte

Leggi altre domande sui tag