Come progettarlo meglio?

0

Sto sviluppando un sistema utilizzando .NET che verrà utilizzato da più utenti. Per questo motivo, ho bisogno di identificare sul database quali dati appartengono a ciascun utente. Spiegando con un esempio, immagina di avere l'entità Product . Quindi ogni utente ha i suoi prodotti e quindi nel database sulla tabella dei prodotti dobbiamo essere in grado di distinguere tra i prodotti di ciascun utente.

Detto questo, la mia soluzione era quella di aggiungere al database una colonna aggiuntiva per ogni tabella per l'id utente. Ora, sul mio codice era come aggiungere ai miei repository un parametro per ricevere l'id dell'utente in modo che il repository fosse in grado di localizzare i dati corretti. L'implementazione concreta del repository per gestire i database relazionali è sufficiente controllare quelle colonne.

Il problema è che per essere in grado di ottenere quelle colonne disponibili sul mio repository e sul mio ORM (nel caso EF) avevo bisogno di aggiungere su ogni entità una proprietà UserID . Il problema è che se penso che per un po 'non sembra una buona soluzione. Sto accoppiando le entità di dominio con dettagli su come mantenere i dati. Oltre a ciò, sto accoppiando ogni entità con il modo in cui gestisco l'accesso ai dati e questo sembra un approccio sbagliato.

Quindi, conciliarlo, c'è un modo migliore per pianificare questo? Un modo per assicurarci di poter mettere in relazione i dati con gli utenti e allo stesso tempo di evitare tali proprietà sulle entità di dominio?

    
posta user1620696 25.04.2014 - 04:45
fonte

2 risposte

2

Se ciascun utente ha veramente i propri prodotti, e il prodotto dell'utente Joe denominato "Foo" non ha nulla da fare con il prodotto Jane utente chiamato "Foo" (anche, per pura coincidenza), quindi l'ID utente appartiene al tuo dominio problematico.

Non vedo perché devi aggiungere una colonna ID utente alla tabella ogni che fa riferimento a un prodotto. Un prodotto può avere un PK (artificiale) unico e l'ID utente di un prodotto può essere consultato nella tabella del prodotto che lo utilizza.

Se, d'altro canto, i prodotti hanno senso quando sono separati dagli utenti, presumo che esista una relazione M: N tra prodotti e utenti. Una tabella di coppie (product_id, user_id) sarebbe quindi sufficiente.

    
risposta data 25.04.2014 - 05:01
fonte
1

In questo caso dovresti avere userid in entità (categorie, clienti, ecc.) come FK. Invece di creare una tabella separata per ogni singolo utente, usa una tabella e disponi di un FK in quella tabella che sarà collegata alla tabella principale User.

Tuttavia, se si dispone della tabella principale del cliente, è sufficiente disporre di una tabella di transazioni tra Utente e Cliente.

    
risposta data 25.04.2014 - 07:15
fonte

Leggi altre domande sui tag