Это не идеально, потому что рано или поздно кто-то или что-то собирается обновить last_name
или first_name
без обновления full_name
, или наоборот, и вы будете иметь что-то подобное в вашей базе данных:
first_name last_name full_name
John White John Black
И то вы можете попытаться выяснить, откуда происходит несоответствие, и о том, что на самом деле должна быть фамилия этого парня, и это не забавно. Если вы собираетесь в denormalize такой таблице, для этого должна быть какая-то веская причина. Какова причина вашего партнера в том, что вы хотите, чтобы full_name
было отдельным полем?
Вероятно, вам следует исследовать альтернативы. Например, вы можете определить view, который возвращает различные компоненты имени из вашей таблицы, а также собирает их в full_name
. В зависимости от вашей РСУБД у вас могут быть и другие варианты. Например, в SQL Server вы можете поместить computed column прямо в вашу таблицу.
declare @customer table (first_name varchar(50), last_name varchar(50), full_name as first_name + ' ' + last_name);
insert @customer values ('John', 'B');
select * from @customer;
Результат:
first_name last_name full_name
John B John B
Как правило, вы хотите, чтобы атрибуты таблицы были атомарными - это означает, что вы хотите, чтобы они были в неприводимом состоянии, когда это возможно. Предположим, что кто-то из перечисленных в таблице должен был выйти замуж, и их фамилия изменилась. Вам не только нужно было обновить соответствующее поле 'last_name', но вам также придется переписать содержимое« full_name ». – Philip