В основном, ваши классы сущностей всегда должны содержать
свои собственные "полезные" данные - например, атрибуты этой сущности, такие как имя и другая информация самого лектора
атрибуты внешнего ключа для связи с другими объектами, например, CourseId
, но не более
Основной принцип реляционного проектирования - убедиться, что ваши отношения установлены, и вы устраняете все дублирование данных -> например, не сохраните CourseName
с классом Lecturer
, так как если вы захотите, то если имя курса изменится, вы должны начать обновлять его не только в таблице Course
, но и в все экземпляры Lecturer
и, возможно, Student
строк, которые используют этот курс. Это именно то, что вы пытаетесь избежать.
Идея такова: с атрибутом внешнего ключа CourseId
, хранящимся в Lecturer
, если вы загружаете лектора, вы также можете взять атрибут FK, а затем загрузить соответствующий Course
и получить все его детали. - без необходимости дублировать информацию в нескольких таблицах / объектах.
Если вы захотите использовать Entity Framework , вы можете очень легко включить эти ссылки fk в качестве "свойств навигации" в ваших классах:
public class Lecturer
{
// Lecturer's own attributes
public int lecturerId { get; set; }
public string lecturerName { get; set; }
// FK attribute
public int courseId { get; set; }
// FK navigation property
public virtual Course Course { get; set; }
}
и затем «магия EF» автоматически выполняет эту «загрузку» в фоновом режиме.
Теперь в своем коде вы можете загрузить Lecturer
, а с помощью навигации по его свойству Course
вы также можете получить доступ ко всем деталям Course
- без дублирования каких-либо данных.