I not an IT guy but let me try rewrite a bit k? See if I understood what you said correctly.
Database level checks and constraints are now only a good-to-have but no longer an absolute necessity. Rather, checks should be implemented at application level so that violations can be detected as early as possible.
They are not mutually exclusive;
If your system is going to be open/integrated with other systems, you cannot guarantee that input from those sources are going to be valid.
Both have their uses, and appropriate use of them will keep your application/database robust.
Eg. if your database field is going to only support a certain enum value, then an application-level check will easily save a roundtrip query to the database.
On the other hand, if insert keys such as NRIC is only enforced at application level, you will have to first query the database, before using another query to insert.
Whereas if the database has the unique constraint written, you can just optimistically insert and monitor the return code from the database.
Given a constant list of unique names (eg countries), codes are often created and used to in place of the full name (eg SGP, SG for Singapore). Is this still a good practice given that storage and processing speed have been improving by leaps and bounds?
I'm guessing this is the argument for nosql. But even if processing speed/storage is improving, there is no good reason not to improve it via such lookup keys. Moreover, such codes (usually ISO) have been widely adopted as standards and will vastly make your codes compatible with other systems.
For eg., if your system uses 3rd party logins (maybe google/facebook?) which shares your country, it is likely stored as ISO codes; which you can then directly integrate with your existing system, rather than depend on a middleware to convert those codes to your system's version.