Per prima cosa determiniamo a quali relazioni applicative siamo interessati. Ad esempio "l'utente [ID utente] ha il ruolo di conferenziere" o "l'utente [ID utente] ha il nome [nome] e la password [password] e ...".
Ciascuno ottiene una relazione di base che contiene le righe di valori che sono correlate in questo modo. I parametri della relazione applicativa di una relazione sono i suoi attributi. Es. Docente (ID utente) o Utente (ID utente, nome, password, ...).
Per ogni relazione il significato della sua relazione di applicazione determina per ogni colonna da quale insieme di colonne dipende funzionalmente. Es:dato l'utente [ID utente] ha il nome [nome] e la password [password] e ..., se conosci l'ID utente, conosci il nome? Se è così c'è FD {user ID} -> {first name}. Se conosci ID utente e password conosci il nome? E così via per ogni relazione e ogni insieme di attributi (possibilmente determinanti) e ogni attributo (possibilmente determinato).
Quindi troviamo una copertura minima per questo. Questo determina le chiavi candidate.
Quindi, se vuoi un feedback su questi passaggi, fallo.