pixelplumber
Functions with a once
schedule run 'once' - so they are never repeated, not even when an application updates or the server restarts. If you remove the once
schedule and create a new one, it will run again - but again, only once 😉
So with a once
schedule, you do not need to worry about blocking repeat execution. But in general, yes, I would use a relation and store/update a value to check on the next run and abort the operation if it was already done.
Regarding unique identifies - for this purpose, the UUID type is especially useful, which can be automatically created as default values on record creation, or later via backend functions.