I have to create logic for generation unique number identifier for records in database. id, generated in database is a separate column.
At this moment, when user calls “create record” action, I save new record, get its database id, generate record number using this id, then put it to the edit form.
Using this way means that all entity fields should be nullable to save record to database.
I don’t like this way. I know that should be better way.
Is there a better practice to generate unique number identifier? What is possibility of generating non-unique random numbers?
Thank you
The pattern that you’re using, of saving an empty record simply to get the ID, is not a good one.
The standard approach, and the one that I’d recommend, is for Create Record to simply display an empty form (the ID at this point will typically be 0). The user fills in the form and the data is only committed to the database when the user clicks Save. The ID should be an IDENTITY column.
A problem with your approach is that if users do not complete the form, you end up with lots of incomplete records in your database. And, of course, it makes it much more difficult to handle data validation and integrity.
An alternative approach, if you really must display the ID to the user, is to have a separate table containing a row with a “Next Record ID” column. This column can be incremented and returned as an atomic operation and used to populate the ID of your new record. You still don’t create the real record, just increment this “Next Record ID” in your Create Record action. Using this approach, you can use the same approach for multiple entities by having separate rows for each in this “Record IDs” table. Bear in mind that if the user does not ultimately save the record to the database, an ID will still have been ‘used up’. The numbers will still be unique and will be chronological but won’t necessarily be contiguous.