Legacy system. Someone once started curating two spreadsheets for each year because they didn’t know better. They had different formats too, because the naughty one listed separate entries for each naughty deed and a column describing it. Whenever they added something to that list, they manually checked and deleted the kid from the nice list.
Eventually, the amount of children they’re responsible for got too large, so they learned some basic SQL and built themselves a database. To import the legacy lists and keep their workflow, they built separate tables. Just be glad they eventually learned how to filter by year and stopped creating new schemas for every year.
Relational database. He’s got children, which joins tonaughty and nice on childid and both record their status each year so that he can monitor trends.
CREATEVIEW NiceList ASSELECT*FROM Children
WHERE behavior ='nice'AND parent.income >40000;
CREATEVIEW NaughtyList ASSELECT*FROM Children
WHERE behavior ='naughty';
He used to have an is_nice bool but consultants convinced Santa it isn’t future proof enough to capture the nuances of kids behaviour in today’s world, such as “nice but always is really smug about it”. But the consultants kept making PowerPoints instead of updating the backend, so now Santa also has added a new value to behaviour: “consultant-like”
Why would Santa need two separate tables for this?
Legacy system. Someone once started curating two spreadsheets for each year because they didn’t know better. They had different formats too, because the naughty one listed separate entries for each naughty deed and a column describing it. Whenever they added something to that list, they manually checked and deleted the kid from the nice list.
Eventually, the amount of children they’re responsible for got too large, so they learned some basic SQL and built themselves a database. To import the legacy lists and keep their workflow, they built separate tables. Just be glad they eventually learned how to filter by year and stopped creating new schemas for every year.
don’t underestimate database design in production environments
Exactly, Santa’s always watching and audit logs get complicated
Relational database. He’s got
children, which joins tonaughtyandniceonchildidand both record their status each year so that he can monitor trends.I would make two separate views.
CREATE VIEW NiceList AS SELECT * FROM Children WHERE behavior = 'nice' AND parent.income > 40000; CREATE VIEW NaughtyList AS SELECT * FROM Children WHERE behavior = 'naughty';which default currency shall santa use ? Dollar have no sense, if presents are free. However Yuan may ease things with providers.
The income is a nice touch.
The poor kids can’t even afford coal and fall through the cracks.
Why are we using magic strings for behavior?
He used to have an is_nice bool but consultants convinced Santa it isn’t future proof enough to capture the nuances of kids behaviour in today’s world, such as “nice but always is really smug about it”. But the consultants kept making PowerPoints instead of updating the backend, so now Santa also has added a new value to behaviour: “consultant-like”
Feel free to fork my comment.
Does Santa accept PRs?
It’s an ENUM and other people have to read this fucking codebase too, Brian!
I’ve a DBA who would insist on this being in a dimension table and using a foreign key constraint instead of just a fucking string
I like your DBA!
Users probably don’t.
You forgot the join smh
Omitted for brevity.
stop static “variables”! use COL. congress should do the same for setting minimum wage. eg parent.income > COL
Once you get a few thousand columns wide you create a naughty_list2 for the new data