How to handle card database for a TCG

So I’ve made a few rudimentary games from tutorials in Unity, but I’m still fresh to game development and have been relying more on knowledge of OOP in general to script for a TCG. My current conundrum is how to handle creating a database (for lack of a better word) of all of the cards (which will number in the hundreds) available in the game.

A quick overview:
There are four types of cards, Creatures, Environments, Structures, and Spells, which share the fact that they each will have a name and possible effect, and differing elsewhere (i.e. Creatures also have Vitality, Strength and Guard stats, whereas Structures have only a Fortification stat).

I created a Card class which is then extended by Creature, Environment, Structure and Spell classes. My first thought was to create classes for each of the specific cards, which would extend their respective card type class, but I’m guessing that having hundreds of classes will not be efficient.

My best guess at this point is to make some sort of CardCreator class that will read in and parse from an external file and instantiate all of the Card objects for a given deck. Since I’m beginning with preset “starter decks” (I will roll out the ability to customize decks later), this seems like it would be an appropriate tactic. However, this leads to a further dilemma: how would I handle card effects? (ex: “This card gains +1 Strength for every Demon-type Creature you control”) This is where creating classes for each specific card has an advantage, as I can hard-code its effect as a method. Every other attribute of a card could plausibly be parsed from, say, an XML file, but not effects, as there is a huge variety. Any advice would be much appreciated.

And, as a separate but related question, would a CardCreator class as I mentioned above that would, in theory, instantiate hundreds of Card objects, be a huge advantage over having hundreds of classes representing specific cards?

Have a look at storing information via XML. You can then make use of all of the classes you need to handle the game rules and use the XML to store the actual cards, which are essentially the implementation of that class.