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.