something that could allow for a lot of neat flexibility is adding on a char_data pointer on to affected_type for the caster of the spell affect.
Also maybe a byte or int for storing the level of the spell affect, and maybe a generic int to store "as needed" information.
That would allow for many things, such as:
multi-round spell damage that is tied to the caster. So that the caster gets full credit for damaging the opponent after the initial casting
Can tie spell effects to the presence of casters. If they are in the room, great, do the spell, if not, remove the affect.
If caster dies or leaves the game, you can remove all spell affects they left behind.
Can tie dispel magic to the level of the spell affect rather than the level of the target.
Other fun things I haven't thought of I'm sure.
Of course adding this to the current setup requires a full pwipe I believe, which makes me wonder about the sql conversion.