Если вы используете реляционную базу данных, ваше предложение является практически единственным способом сделать это. Теория нормальных форм 1002 * даст вам больше информации о ней - статьи в Википедии о ней довольно хороши, хотя и немного тяжелы, потому что это сложный теоретический предмет, когда вы переходите на более высокие уровни нормализации. Хотя примеры в основном здравого смысла.
Предполагая, что у вас есть таблица Vehicle, таблица Color и таблица TyreType (извините за британскую орфографию), вы, вероятно, определяете таблицы VehicleTyre и VehicleColour, которые действуют как соединение между соответствующими парами таблиц. Эта структура на самом деле довольно здорова. Он не только инкапсулирует информацию, которую вы хотите напрямую, но также позволяет естественным образом фиксировать такие вещи, как, например, какая шина (например, передний левый - Bridgestone 275 / 35-18) или какая часть автомобиля окрашена в красный цвет (например, с помощью процентное поле в таблице VehicleColour).
Возможно, вы захотите смоделировать объект типа транспортного средства, который может определять количество шин. Хотя это и не нужно для того, чтобы вывести рабочие запросы SELECT из системы, вероятно, это будет полезно как для вашего пользовательского интерфейса, так и для определения количества шин, которые нужно вставить в ваши таблицы.
В моей компании есть множество схем, которые работают именно на этой основе - действительно, наша объектно-реляционная структура автоматически создает их для управления отношениями «многие ко многим» (а иногда даже для отношений «один ко многим» в зависимости от того, как мы их моделируем). ). Некоторые из наших приложений имеют более 150 сущностей и более 100 из этих таблиц соединения. Нет проблем с производительностью и нет значимого влияния на управляемость данных, за исключением того, что некоторые имена таблиц раздражающе длинные.