Expanding on Lord Farquaad's comment,
this is the solution I used for the database of creature stats, in particular, carrying capacities. Very small creatures have maximum loads that are not an integer number of pounds, so they are recorded in ounces. Every load is an integer number of ounces.
I agree with you that it's nice to avoid floating-point numbers if possible. For example, suppose that you can buy 20 of an item for 3gp. Then one is worth 20/3 gp, or about 6.66666667gp...but rendered in binary, it's 110.1010101010101010101010...
It's annoying to deal with. Unfortunately, I don't think having a separate integer for a decimal part will make it any less annoying to deal with.
The solution I used was, obviously, to record the number in a different, smaller unit --- ounces instead of pounds. That's literally what I called the field in the database, max_load_ounces.
You constantly have to be converting between units anyway, especially if we're talking about coins.
Unfortunately, in the case of copper pieces rather than pounds, there isn't a natural smaller unit that conveniently turns everything into integers. (Well, the Dark Sun setting has "bits" like the farthings/fourthings KorvinStarmast mentioned, but that would probably just get more confusing and annoying to deal with, since Dark Sun has ceramic pieces in place of copper pieces, in the sense that a tenth of a silver pieces is a ceramic piece, except it sort of has ceramic pieces in place of gold pieces, it's complicated.)
Since there isn't a convenient smaller unit, I think you're fully justified in just making up one for your own convenience. If you know in advance every single one of the objects you're going to include in the database, then all you have to do is take the common denominator of all the fractions --- the least common multiple of all the denominators.
But if (as I assume) you don't know everything in advance and you want a unit that will be pretty safe, you probably want one-sixtieth. Why one-sixtieth? For the same reason the ancient Mesopotamians used it. Because 60 = 2*2*3*5. 1/4 becomes 15/60. 1/3 becomes 20/60. 1/5 becomes 12/60. Sixtieths give you pretty broad coverage for the most common fractions. Sixtieths will probably work for everything you'll run into.
I was about to say you could just call the field market_price_60th_copper_pieces, but looking at your repo, you decided to get fancy and make "gp" a proper type with its own internal translation.
https://github.com/ocket8888/dndDB/blob/master/gp.c already does automatic division every time a value is output --- you internally store the value in copper pieces, and translate to gold pieces on-the-fly by dividing by 100. You could just as easily store the value internally as sixtieths of copper pieces. (Or, if https://github.com/ocket8888/dndDB/blob/master/items.sql already has all the items you want and you know you won't run into any more unexpected fractions, you can take the actual common denominator instead of hedging and making the common denominator 60 to be safe.)
In any case, the good news is that if you do later run into an unplanned-for fraction --- like if for some bizarre reason the market price of something is 1/7 --- it's not too hard to translate the existing database to use a smaller unit: just multiply every price by a new prime number (in this case 7). If you have hardcoded INSERT commands as in https://github.com/ocket8888/dndDB/blob/master/items.sql , just run a SELECT for the multiples and use the output mode that spits out INSERT commands --- in SQLite this is .mode insert, I don't know how to do it in Postgres but I assume Postgres must have something analogous.
For the sake of completeness, it's worth noting that the worth of D&D coins have no seigniorage --- a gold coin is a fiftieth of a pound, and a pound of gold is worth 50gp. The point of minting is purely to guarantee the purity of the metal (and its standard weight) with the reputation of the minting kingdom. The fancy design is a nice bonus that makes it nigh-impossible to shave off little bits of gold from the coin without people noticing. But at the end of the day the value of a coin is its weight of precious metal, so you could use any unit of weight as a unit of value. I don't recommend that, because units of weight are bedlam. We'd have to start talking about Troy pounds of gold versus avoirdupois pounds of gold, and you probably don't want to go down that rabbit hole.