I read that in nosql (cassandra for instance) data is often stored denormalized. For instance see this SO answer or this website.
An example is if you have a column family of employees and departments and you want to execute a query: select * from Emps where Birthdate = '25/04/1975'
Then you have to make a column family birthday_Emps and store the ID of each employee as a column. So then you can query the birthday_Emps family for the key '25/04/1975' and instantly get all the ID's of the employees born on that date. You can even denormalize the employee details into birthday_Emps as well so that you also instantly have the employee names.
Is this really the way to do it?
Whenever an employee is deleted or inserted then you will have to remove the employee from birthday_Emps too. And in another example someone even said that sometimes you have a situation where one delete in some table requires like 100's of deletes in other tables. Is this really common to do?
Is it common to do joins in application code? Do you have software that allows you create pre-written applications to join together data from different queries?
Are there best practices, patterns, etc for handling these data model questions?