If you use a relational database, your suggestion is almost the only way to do this. the theory of normal forms will give you more information about this - Wikipedia articles about this are not bad, albeit a bit heavy, because it is a complex theoretical subject when you get to higher levels of normalization. Common examples are common sense.
Assuming you have a car table, a color table, and a TyreType table (sorry for the English spelling), you apparently define a VehicleTyre and VehicleColour table, which acts as a join between the corresponding pairs of tables. This structure is actually quite healthy. It not only encapsulates the information you need directly, but also allows you to naturally fix things like, for example, which tire (for example, the front left - Bridgestone 275 / 35-18), or which part of the car is painted red (for example, with using the percentage field in the VehicleColour table).
You may want to model an object such as a vehicle that can determine the number of tires. Although this is not necessary in order to get working SELECT queries from the system, it will probably be useful both in your user interface and in determining how many buses to insert into your tables.
My company has many schemes that work on this basis. In fact, our object-relational structure automatically creates them to manage many-to-many relationships (and sometimes one-to-many relationships, depending on how we model them). Some of our applications have over 150 objects and over 100 of these join tables. There are no performance issues and no significant effect on data manageability, except that several table names are annoyingly long.
source share