Tabella di progettazione per archiviare la gerarchia

0

Ho una tabella società e utente come sotto ...

Tabella società:

CompanyID    CompanyName    etc...

Tabella utente:

UserID    Email    UserType    CompanyID    etc...

Per prima cosa devo dirti che, attualmente ho due tipi di utente, amministratori (che possono fare qualsiasi cosa) e utenti (con alcuni privilegi di base)

Ora ho l'obbligo di presentare, Filiale delle aziende. Supponiamo che l'Azienda A abbia il Ramo A, il Ramo B, il Ramo C ecc. E che questi rami possano essere collocati in tutta la geografia o all'interno della stessa regione.

Ora ho due opzioni ... 1. Creare un ramo di una tabella. 2. Aggiungi una colonna alla tabella Company denominata ParentCompanyID

Sono più incline verso 2, in quanto è una soluzione facile. Ma non sono sicuro nel prossimo futuro se dovrò affrontare eventuali problemi di ridimensionamento durante il recupero dei report in base a questa gerarchia. Posso solo farlo presentando una nuova colonna e un utente SuperAdmin.

I SuperAdmins non avranno alcun ruolo, ma solo per visualizzare i report di tutte le filiali e i report specifici delle filiali già esistenti.

Ma se vado con 1, non sono sicuro di come procedere, perché la tabella utente ha CompanyID, che ho bisogno di cambiare in BranchID. Ma poi di nuovo, l'Utente può essere di Società (colui che può visualizzare i rapporti di tutti i rami).

Lo so, non c'è il modo migliore per l'ingegneria del software, ma cosa ne pensi di quale sia il modo più accessibile per il caso specifico considerando il ridimensionamento e le prestazioni in termini di report SQL.

    
posta Krishnandu Sarkar 21.10.2016 - 12:25
fonte

2 risposte

1

La tua seconda scelta di aggiungere un ID filiale è molto simile alla relazione Dipendente - Supervisore. Stai solo unendo un tavolo a se stesso. Esistono modi per interrogare questi dati in modo ricorsivo se si hanno più livelli di filiali (questa azienda è una succursale di un'azienda che è anche una succursale di un'altra società?). Lo schema dei dati è valido anche per questo perché una singola azienda non può rientrare in più di un ufficio principale.

Non penso che le prestazioni siano un problema finché si indicizzano i dati in base a come si desidera recuperarli. Avere un sacco di indici su un tavolo aziendale dovrebbe essere un grosso problema, perché dubito che cambierai società o aggiungerai succursali spesso. Se la tua azienda è così certa da non avere più gruppi, non li vedo nemmeno con migliaia di uffici.

Se si va con la prima opzione (una tabella di diramazione), non si dovrebbe cambiare il dipendente. Il dipendente è assegnato a una società e solo perché quella società ha un ruolo come società principale o una succursale non cambia l'utente. Dovresti semplicemente interpretare quei dati in base all'azienda che ha una casa madre.

    
risposta data 21.10.2016 - 14:18
fonte
0

Hai considerato di aggiungere una tabella gerarchia? In questo modo, puoi avere tutti i livelli che desideri. Tutti i report possono essere eseguiti con ricorsione. Inoltre, se si desidera separare i livelli delle società (chiamiamole business unit), è possibile disporre di un libro di codici di tipi di unità aziendali (ufficio, filiale, area geografica, ...) e tutte le unità aziendali hanno il loro tipo.

Ora, non sono completamente sicuro di come si applicano i tipi di utenti qui. Se non si desidera separare i tipi di dipendenti (operativi, di gestione, ...), tutto ciò che resta da fare è la separazione dei tipi di utente. In base al tipo di utente (o al tipo di dipendente), puoi gestire la GUI per i rapporti o creare queste regole in una stored procedure.

    
risposta data 21.10.2016 - 12:40
fonte

Leggi altre domande sui tag