How to persist selection of foreign key in related table I have a database design that I need to get some help with 

Suppose I have three tables, namely preferences, books, genres. The tables are related as follows: 



The following tables are accessible in a view, in which the user is allowed to add a book to his personal page. 

Currently, the view dictates that the user first choose a genre, before he gets the opportunity to select a book (A basic filter).

However, imagine that the user has selected a genre and decides to come back to select a book at a later point - Then this architecture doesn't support that the selected genre is saved as a part of the preferences. Meaning that, even though the user saved his preferences with a genre, he will have to, once he gets back to add his book, select the genre again in order to then select the book.

Therefore, how would I optimally "refactor" this architecture in order to support what I want to achieve. 

My first intuition would be to add one more column to the preferences table named "genres_Id" and have a foreign key pointing to the genres table. I guess this is not good practice though..
Currently you have something like this, as unusual as it may seem.

user {USR}
  PK {USR}

genre {GNR}
   PK {GNR}

book {BOK, GNR}
  PK {BOK}
  FK {GNR} REFERENCES genre {GNR}

preference {USR, BOK}
        PK {USR}
       FK1 {USR} REFERENCES user {USR}
       FK2 {BOK} REFERENCES book {BOK}




For the stated requirement:

user {USR}
  PK {USR}


genre {GNR}
   PK {GNR}


book {BOK, GNR}
  PK {BOK}
  SK {BOK, GNR}

  FK {GNR} REFERENCES genre {GNR}


pref_genre {USR, GNR}
        PK {USR}
        SK {USR, GNR}

       FK1 {USR} REFERENCES user  {USR}
       FK2 {GNR} REFERENCES genre {GNR}


pref_book {USR, BOK, GNR}
       PK {USR}

      FK1 {USR, GNR} REFERENCES pref_genre {USR, GNR}
      FK2 {BOK, GNR} REFERENCES book       {BOK, GNR}


And if you want to allow more than one preference for each user, just change keys on pref_:

pref_genre {USR, GNR}
        PK {USR, GNR}

       FK1 {USR} REFERENCES user  {USR}
       FK2 {GNR} REFERENCES genre {GNR}


pref_book {USR, BOK, GNR}
       PK {USR, BOK}

      FK1 {USR, GNR} REFERENCES pref_genre {USR, GNR}
      FK2 {BOK, GNR} REFERENCES book       {BOK, GNR}




Note:

All attributes (columns) NOT NULL

PK = Primary Key
AK = Alternate Key   (Unique)
SK = Proper Superkey (Unique)
FK = Foreign Key