Я бы не стал нарушать нормализацию, потому что не существует простого способа обеспечить синхронизацию справочной информации о стране сотрудника и справочной информации о стране.Например, Персонал может иметь для Города значение «Торонто», а для Страны - «Канада», но затем где-то город будет обновлен до «Бостона», но Staff.Country не обновляется.Персонал говорит, что страна - это «Канада», а город - «США».Кому доверяют как источнику правды?
Когда дело доходит до отображения информации о сотрудниках, используйте View Models, чтобы сгладить соответствующие детали.Если вы хотите отобразить сведения о персонале с названием страны и ничего больше о городе, модель представления может предоставить эту информацию на основе данных, выбранных из объектов.Например:
var staffViewModels = context.Staff
.Select(x => new StaffViewModel
{
StaffId = x.Id,
Name = x.Name,
Country = x.City.Country.Name
}).ToList();
Даже если структура вводит Адрес для персонала, который состоит из Города, связанного со страной:
var staffViewModels = context.Staff
.Select(x => new StaffViewModel
{
StaffId = x.Id,
Name = x.Name,
Country = x.Address.City.Country.Name
}).ToList();
Сущность может оставаться нормализованной и генерировать SQLдля эффективного доступа к соответствующим данным.