I made a mistake of thinking all these lookup tables would be a great idea when redesigning our pretty wide tables. So much flexibility, etc but it ended up being much harder to code for, it was impossible to navigate around, and it was just a pain in the ass.
So what did I learn?
- for static values, just use an enum - it's a lot faster and more convenient. This decision has to be made depending on how many other tables may refer to the same variable.
- stick with fewer lookup tables rather than creating as many as you can think of. JOINs are much slower.
- to help yourself navigate around, design database VIEWs. It will make your life a lot easier.
- as a bonus, if you don't want your clients touching certain tables (i.e. your static ones), or touching enum column values, you can use the MySQL (for example) fine-grained permissions to disable changes to certain columns in certain tables. A lot of people don't realize how flexible these permissions can get.