Choosing between NULL and default values comes down to your business logic and what the data actually means. NULL means ‘no information here’ while defaults assume something specific when nothing’s provided. I’ve built a bunch of customer databases and learned that meaningful defaults work great for operational stuff like status fields or timestamps, but they can hide data quality problems. Say you default a phone number to an empty string - now you can’t tell if someone never gave you their number or gave you a bad one. I use NULL for optional contact info and personal details where missing data actually tells you something. Makes data validation way easier and helps with business rules - you can spot incomplete profiles or set up conditional requirements without guessing. But think about how you’ll query the data. NULLs need IS NULL/IS NOT NULL handling, while defaults work with normal queries. Also, some apps treat NULL differently than empty strings, which can bite you if you’re not consistent across your codebase.
depends on your app logic. three-value logic with nulls (true/false/unknown) trips up a lot of devs. defaults can hide bugs though - you think you’re getting real data but it’s just placeholder values. nulls are more space-efficient than default strings in most databases.
what reports you think about? nulls can really mess up aggregations. like for user engagement, do u want missing phone numbers as zeros or just ignored? also, are u using an ORM or raw SQL?