"... it must be Not Null, but in other fields, what is the need to use Not Null? ..."
This accuracy will depend on the field being referenced in some relation that you do in the DB layer, otherwise, if it is a field that must have a value for some reference made with this field in the layer or layers higher than DB. Thus the choice to leave a field as "NOT NULL" is at the discretion of the design of the.
In some cases, as in the use of relations in the upper layers of the DB layer, the designer can leave a field set with a value "DEFAULT {value}" if he needs the value of that field for a reference in the application code.
But, if the DB layer, which is not because it is the first layer of an application is the most important, because the designer can draw almost all the software in that layer, that once it is working very round, is really the layer that will accomplish all the work of processing the application data, thus, will cover in the application, innumerable positive aspects in the issues traffic, speed, usability and security, since the processing of the data mass is almost all being done by the correct relations in the database, the application only has to worry about the "face-to-face user-data" which considerably facilitates the development, the usability, processing speed and hence application security.
Therefore, all fields that are referenced need to be either set to "NOT NULL" or set to "DEFAULT {value}".
I in some case prefer to do this check in the upper layers of the application.
But for example:
Suppose that in a Voce application you have set the correct relationships in the database, logically you will depend on working hours to draw and format the tables in the database to meet the criteria of your application design, well, those hours that Voce will spend drawing well the database, are the hours that Voce will gain in the development of the application UI when the client will already be surely te "wiping the bag, kkkkkkkkk".
hope it helps.
Health and Peace!
When should we allow a column of a table of a database to accept NULL?
– rray