I don’t think the database is well designed, but I know the database design is not from you. ;-)
I can understand why there are three tables, and I actually agree that’s a must, if you want to make the price-product info fully normalized.
But the data in price-type table should be only used for two purposes:
- As a data integration reference, we can use it to check and make sure all price-id’s in all other tables are valid, i.e. there is row in this table for that price-id.
- Store the visual presentation for each price-id, for example, if you want to print some report, instead of showing the less meaningful price-id, you may want to show the price type.
But to use price-type as part of unique keys elsewhere is a bad idea. Only price-id should be used for that purpose.
In the product-price table, instead of storing price-type, should storing price-id, and form unique index together with product-id.