The usual answer: it depends. Your question is basically about normalization: if you want to keep your database normalized, it might be that using an extra table is interesting. But not always. Let’s go in pieces:
What are the possible values of the reason for cancellation?
If the user can only choose from a list of predetermined options (i.e., he(a) cannot enter an arbitrary reason), then to keep the table normalized (eliminating redundancies, making it easier to update these values in the future) you would create a new table with possible reasons for cancellation, and have a foreign key in the order table "pointing" to that new table.
If the user can enter with arbitrary motives - for example, the field to be filled is a text field, or there is a selection of motives with the "other" option where the user can enter any text - then you will not gain much in normalizing the table, since potentially all the reasons will be different.
How will you use this information?
Standardisation is not a panacea that works for all situations. For example, if you’re going to have a lot more writing than reading operations that need to know the reason, denormalizing the table (i.e., having the reason as a field in the order table) can make more sense, even if the potential motifs are a small set.
Other cases where denormalization can make sense
Another case where normalization may not be recommended is if there is a possibility that you may need to distribute your tables. If tables need to be partitioned (a problem you probably only have if you have been working with a high-scale database, or if it needs for some other reason to be geographically distributed), the storage gains and conciseness of normalization would not compensate for the gain of multiple partition joins.
The status is already a table the part because I need to manipulate, the reason is just to keep even..
– Mateus Carvalho