To structure a small inventory system in Python using object-oriented programming principles, I would start by defining classes for the main entities involved, such as `Product` and `Category`. Each class would encapsulate the relevant attributes and behaviors.

For the `Product` class, I would include attributes like `product_id`, `name`, `price`, and `quantity`. Methods in this class could include functionalities to update the quantity or adjust the price.

The `Category` class would have attributes like `category_id` and `category_name`, and it would maintain a collection of `Product` objects. This class could have methods to add or remove products from the category.

To establish a relationship between products and categories, I would use inheritance if there are shared attributes or behaviors among different types of products. Encapsulation would be used to ensure that the internal state of objects is only modified through well-defined methods, promoting data integrity.

Additionally, I would implement methods to display inventory details, search for products, and generate reports. This modular approach not only makes the code more organized and maintainable but also allows for easy expansion of the system in the future.