Предположим, что вы создавали базу данных для хранения данных об авариях различных транспортных средств. Вы хотите хранить данные краш-тестов для катеров, автомобилей и карт-картов.
Вы можете создать три отдельные таблицы: 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)
Это просто становится королевским беспорядком. Как СЛЕДУЕТ установить что-то подобное?