"... It should be Not Null, but in other fields, what is the need to use Not Null? ..."
This requirement will depend on the field being referenced in some relation you make in the DB layer, otherwise, if it is a field that needs to have a value for some reference made with that field in the layer or layers higher than DB. So the choice to leave a field like " NOT NULL " is at the discretion of the application design.
In some cases, such as in the use of relationships 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, other than the fact that it is the first layer of an application, is the most important, since the designer can draw almost all the software on that layer, which, once working well round, is really the layer that will perform all the work of data processing of the application, thus, will cover in the application, many positive aspects in the traffic, speed, usability and security requirements, since the mass processing of data is almost all done by the correct database relations, the application only has to worry about the "user-to-face" face-to-face, which considerably facilitates the development, usability, processing speed and consequently security of the application.
Therefore, all fields that are referenced must either be set to "NOT NULL" or set to "DEFAULT {value}".
In some cases I prefer to do this check in the upper layers of the application.
But for example:
suppose that in an application you have defined the correct relationships in the database, logically you will depend on hours of work to draw and format the tables in the database to meet the criteria of the design of your application, now these hours that you will spend drawing well the database, are the hours that you will gain in the development of the application's UI when the client will already be sure to "shake the bag, kkkkkkkkk".
I hope it helps.
Health and Peace!