Data Assets are fine, yet remember they are read only. Data tables are too slow for what you want to do. Same definitely applies to sql, more so actually.
Complex items such as weapons (guns) have two variants. Weapon_sm and Weapon_sk. The SM (static mesh) variant is a low poly sm, with low data. No need for recoil, camera, firing logic etc. Simply a world actor to interact with. On interaction (pickup), the server destroys the sm variant and spawns the sk (skeletal mesh) variant, attaches to pawn etc. This variant has all the data, specs … recoil, sway, deviation, projectile class, velocity, ik offsets, ammo, attachments etc.
Each item spawned in the world eats memory on the server. The sm_variants are used to reduce this overhead. Another plus is the meshes are low poly, so a render performance gain.
I’m using structs for configs instead of data assets. Modifying variables is pretty straight forward and there shouldn’t be too many that need to be. How you setup your inventory is key. Mine is a struct (see previous linked post). Most of my primary gear/items have an object reference for storage. When the SK variant is spawned I set its obj reference to a slot (struct element).
https://i.imgur.com/UhBDPxq.jpg
https://i.imgur.com/2mC9yqg.jpg
https://i.imgur.com/kYGLNmU.jpg
https://i.imgur.com/iqzHLd7.jpg