ScriptableObject vs Serializable Field

I think you probably just want to look at some basic inheritance concepts. A base item/effect type, which you make inherited scriptable objects of to have different behaviour.

There’s also [SerializeReference], which lets you serialize plain C# objects with polymorphism within monobehaviours or scriptable objects to do something like this without the need for tons of different scriptable object types. Downside is Unity doesn’t have built in inspector support for it, but addons like Odin Inspector can add it, or I wrote a simple example of a property drawer here: abstract SkillList that can be edited in Inspector - #15 by spiney199

Though with stuff like this, the complexity does start to stack up quickly.