Теперь, чтобы получить компании или пользователей, мы должны присоединиться к таблице людей.Если мы изменим таблицу сотрудников, мы должны переписать все запросы и, возможно, много кода.
Является ли это реальной проблемой?Моя структура БД имеет недостатки?
Нет, ваша структура не имеет недостатков в этом контексте.Ваше восприятие этого неверно.
Имена таблиц и столбцов составляют часть открытого интерфейса с базой данных.Думайте об этом как об API.Независимо от того, какой код вы пишете, если вы измените API, вам придется переписать некоторый код.Если вы измените API базы данных - имена таблиц и столбцов - вам, возможно, придется переписать lot кода.Но .,.
Допустим, вы извлекаете код своей базы данных из своей системы управления версиями и меняете имена столбцов в своей таблице "people" на first_name, last_name.Без каких-либо других изменений вы не сможете перестроить базу данных, потому что вы нарушили публичный интерфейс.(Представления, которые выбирают «firstname», убивают сборку. Хранимые процедуры, которые читают или записывают в «firstname», убивают сборку.)
Но вы можете быстро восстановить это, переименовав таблицу «people» и создаввид.Вы можете идти вперед, как это.
- Переименуйте "people" в "people".
- Создайте представление с именем "people".(
SELECT * FROM persons;
) - В представлении создайте псевдонимы для двух измененных столбцов, присваивая псевдонимы от имени до имени, а от фамилии до фамилии.
- Если ваша база данных не поддерживает нативно обновляемые представления,напишите любой процедурный код, который вам нужен, чтобы сделать представление обновляемым.
Любой код, который должен запрашивать или обновлять базовую таблицу с именем "people", вместо этого будет запрашивать и обновлять представление с именем "people".Никакой другой код не должен быть переписан.(Если у вас нет кода, который делает необоснованные предположения о том, работает ли он с базовой таблицей.)
Реляционные базы данных реализуют логическую независимость данных через обновляемые представления.