You URI will be set on contract deployement as the baseURI. After that, each NFT minted will have an ID. So if anyone create an NFT. They will add MetaData to it without changing the base URI.
A baseURI https://nft.madeindreams.org (this would be my base uri)
Every NFT created will have an ID and they will fetch your baseURI with the NFT ID like that.
So this will display the metaData for that NFT.
So you don’t let the user set a base URI. You record the MetaData they provided with the NFT to your DB or what ever process you use to store the Data.
So the base URI remain the same but each id point to a record somewhere in a DB.