In short:

  • Every “noun” gets its own table.

  • “many to many” relationship get their own tables

  • “one to many” relationship require the table that “owns” another table have its id in that other table

  • Any time a table has an id that refers to a row in another table, use a foreign key constraint to make sure that id really exists

Doing this would probably results in many tables but it would help ensuring the 3NF(every non-key attrib must provide a fact about key, the whole key and nothing but the key) quite easily and go further for 4NF and 5NF - the ultimate, super-uber normal form (Jeez who need 5NF!?).

If you want an easy, effortless and good enough design, go for this.