Gordon is right (which is not surprising).
Here are considerations that you don’t worry about, in my opinion.
When dealing with dozens of megalogs or less, the storage space is mostly free. Don't worry about the difference between INT and VARCHAR (20), and don't worry about the cost of disk space to add an extra column or two. It just doesn't matter when you can buy decent terabyte discs for around $ 100.
INT and VARCHARS can be indexed quite efficiently. You will not see much time difference.
This is what you should worry about.
There is one major error in index performance that can get hit by character indexes. You need columns on which you create indexes that will be declared NOT NULL , and you never want to make a query that says
WHERE colm IS NULL
or
WHERE colm IS NOT NULL
This type of lesion affects indexing. In a similar vein, your performance will go a long way if you apply functions to columns in your search. For example, do not do this because it is too hit indexing.
WHERE SUBSTR(colm,1,3) = 'abc'
Another question to ask yourself. Will you uniquely identify rows in your helper tables, and if so, how? Do they have some kind of primary key of a natural compound? For example, you can have these columns in a "child" table.
parent varchar(20) pk fk to parent table birthorder int pk name varchar(20)
Then you can have lines like ...
parent birthorder name homer 1 bart homer 2 lisa homer 3 maggie
But, if you tried to insert the fourth row here, like this,
homer 1 badbart
you will encounter the primary key because (homer, 1) is busy. It is probably a good idea to work with primary keys for your auxiliary tables.
Character strings containing numbers are funny. For example, "2" appears after "101". You should be aware of this.