In OroCommerce, a product family can be used to effectively group attributes related to a specific product. It is highly recommended that you create a separate product family for each product type in order to have only relevant attributes associated with your products. For example, if your products are desks and desk lamps then you may want to include an attribute such as wood finish into the desk product family and a lighting bulb type into the desk lamp product family.
The bad practice would be to put all your attributes into a single product family that becomes shared by different products, e.g. put a lighting bulb type and a desk wood finish into a general furniture product family.
Importantly, the logical separation of attributes between different product families will spare you the problem of displaying irrelevant filters when customers view your products on your online front store. If you keep to the “one product family per product” strategy then you will always have only relevant filters displayed for your products, clean UI, and much better performance!
There may be some attributes that are basically the same for different product types (product families). In fact, OroCommerce features system attributes that are mandatory and included for any product family as they contain core product details, like SKU or Inventory Status. You may also have some custom attributes that can be potentially shared between your multiple products, such as color, material, design, etc. What should you do in this situation?
A rule of thumb is to share the same attribute between different product families only when it means the same thing and has the same set of values for those families. For example, when it comes to desks and desk lamps, an interior style may be a shared attribute that includes a predefined set of values, such as traditional, loft, or high-tech, which make sense for both product types. But the attribute like color, even though it means the same thing for both, should be split into desk color and desk lamp color attributes because these two product types will obviously have different color sets available for the customer. This approach will ensure that you have only relevant values in filters on your product pages (one set of colors for desks and another set of colors for desk lamps).
Impact on Performance
Creating multiple product families as per your product types and splitting shared attributes when they have different sets of values for different products helps significantly reduce the load on the database and improve the overall application performance. Always do that in advance of implementing your OroCommerce application.