Добрый вечер! В настоящее время делаю модель БД будущего приложения. Перечитал много материала, статей в интернете и везде пишут что связь “один к одному” используется крайне редко. В моей же модели почему-то с точностью да наоборот, что наводит на мысль что я делаю что-то не так. Допустим есть таблица “Автомобили” с полями: код_авто, марка, производитель, тип_кузова, объем_двигателя и.т.д. Вопрос: стоит ли выносить такую сущность как “тип_кузова” в отдельную таблицу?
Почему я хочу вывести данные в отдельную таблицу:
1) как бы то ни было - это дублирование данных, избыточность;
2) максимально снижается риск неправильного ввода данных по этому полю, т.е. где-то ввел “седан” где-то “сидан” ну или “чедан” потом при формировании запроса уже будет не понять сколько у тебя седанов в БД;
3) на случай того вдруг завтра кузов данного типа будет называться как-то иначе.
P.S. На самом деле моя БД ни как не связана с тематикой автомобилей, просто привел для примера.
Все ваши отношения в примерах - это отношения один-ко-многим. У разных автомобилей может быть один и тот же тип кузова. То есть один тип кузова относится ко многим автомобилям. То же самое с цветом, маркой и т.п. Вы всё делаете верно. Такие поля ещё называются lookup. То есть в форме для ввода вы не вводите с клавиатуры цвет или тип кузова, а "подсматриваете" (выбираете) его в отдельной таблице. Так что всё у вас правильно. Только повторите теорию отношений в реляционных БД, чтобы исключить путаницу. На самом деле отношения один-к-одному встречаются крайне редко. Примером может быть таблица пользователей сайта и таблица индивидуальных настроек пользователя. Тут одношение один-к-одному. Один пользователь - одна запись в таблице настроек. Зачем выносить настройки в другую таблицу? Чтобы не перегружать таблицу пользователей.