Предположим, вы настраивали базу данных для хранения данных краш-теста различных транспортных средств. Вы хотите хранить данные краш-тестов для быстроходных катеров, автомобилей и картингов.
Вы можете создать три отдельные таблицы: SpeedboatTests, CarTests и GokartTests. Но многие ваши столбцы будут одинаковыми в каждой таблице (например, идентификатор сотрудника человека, который выполнил тест, направление столкновения (спереди, сбоку, сзади) и т. Д.). Тем не менее, множество столбцов будет отличаться, поэтому вы не хотите просто помещать все тестовые данные в одну таблицу, потому что у вас будет довольно много столбцов, которые всегда будут нулевыми для скоростных катеров, довольно много, которые всегда будут быть нулевым для автомобилей, и немало таких, которые всегда будут нулевыми для картинга.
Допустим, вы также хотите хранить некоторую информацию, которая не имеет прямого отношения к тестам (например, идентификатор сотрудника дизайнера тестируемой вещи). Кажется, что эти столбцы вообще не подходят для таблицы «Тесты», особенно потому, что они будут повторяться для всех тестов на одном и том же транспортном средстве.
Позвольте мне проиллюстрировать одно возможное расположение таблиц, чтобы вы могли видеть соответствующие вопросы.
Speedboats
id | col_about_speedboats_but_not_tests1 | col_about_speedboats_but_not_tests2
Cars
id | col_about_cars_but_not_tests1 | col_about_cars_but_not_tests2
Gokarts
id | col_about_gokarts_but_not_tests1 | col_about_gokarts_but_not_tests2
Tests
id | type | id_in_type | col_about_all_tests1 | col_about_all_tests2
(id_in_type will refer to the id column of one of the next three tables,
depending on the value of type)
SpeedboatTests
id | speedboat_id | col_about_speedboat_tests1 | col_about_speedboat_tests2
CarTests
id | car_id | col_about_car_tests1 | col_about_car_tests2
GokartTests
id | gokart_id | col_about_gokart_tests1 | col_about_gokart_tests2
Что хорошего / плохого в этой структуре и какой предпочтительный способ реализации чего-либо подобного?
Что, если есть также некоторая информация, которая относится ко всем транспортным средствам, которые вы хотели бы иметь в таблице транспортных средств? Будет ли таблица CarTests выглядеть примерно так ...
id | vehicle_id | ...
With a Vehicles table like this:
id | type | id_in_type
(with id_in_type pointing to the id of either a speedboat, car, or go-kart)
Кажется, это просто королевский беспорядок. Как ДОЛЖНО быть настроено что-то подобное?