As was added by @fromero, my recommendation would be to utilize a scheduled automation with a query instead of the update contact function. This is because after the update contact is run, it will never update that contact again, meaning if they open after X days, it will never reflect that they opened the email inside your data.
By utilizing a scheduled query, you will have a recurring check against the data view (real time data) to verify if that person opened the email or not, which will reflect more accurate information inside your data.
Example query:
SELECT a.SubscriberKey,
Opened = 1
FROM [myDE] a
WHERE EXISTS (
SELECT TOP 1 o.SubscriberKey from [_Open] o
WHERE o.SubscriberKey = a.SubscriberKey
AND o.TriggererSendDefinitionObjectID = {{myTSD_ID}}
AND o.EventDate > (CAST(GETDATE() - 1 as Date))
)
That being said though, if you just want this to record if they have opened by Day X, then utilizing the update contact function is the perfect solution. I would just make sure to clarify that inside your field naming convention to ensure it is easily understood and referenced correctly later.