I also try to leave large blank spaces in my database when I add entries, precisely to avoid what Zoltor mentioned. And I've already found I didn't leave enough blank spaces in some cases.
I think almost all object references use the internal ID instead of a name, because names are not guaranteed to be unique. In my current game, I have two Fire Bolt skills --- one monsters use (which bumps a "fire used" counter), and one the players use (which does not). Both have the same name, so a "by name" lookup would never find one of them.
Lessons learned on my part --- always over-estimate the amount of blank spaces you'll need. If I were to leave blank space for Armor types, I'd leave at least enough space for 15 items of each Armor type --- the obvious upgrades, plus perhaps permutations like "Flame Armor".
Personally, I never move any objects around, because when I've done that, I've had strange interactions with my scripts, because the latter were running with a specific ID. So it's not just "copy and paste" objects, which is tedious, but "hunt down ALL of the references to ANY objects I've moved." That becomes a lot more work than "Deal with objects not being in order"
You can end up with strange bugs like the Wise Elf at the end of the game giving you the worst weapon, because the Elf gave Weapon ID 120, and you've put a joke weapon at ID 120 and moved the Ultimate Weapon to ID 130. Or more subtle bugs where a Quest now requires an item (referenced by ID) the player couldn't have yet.