Looks good. They’re all items so just create an item struct for all the properties that all items have(item id, item name, type of item, array of base item id, added bonuses, number of uses, assets, etc).
As for base crafting items, create an array of ints or a concatenated fstring to reference the id given to items used as base items for crafting. This way all data for an item is stored in a single struct and easy to access and store in a database.
For a players item collection just create an array of items. You could have a multilayered item system but then it doesn’t have such good backwards compatibility up the struct. In the case of items with many more attributes add a completely different struct to hold these attributes, this would keep data management easy.