Розмітка зв'язків таблиць (шаблон проєктування)
Розмітка зв'язків таблиць (англ. Association Table Mapping) — шаблон проєктування, який пропонує відображати колекції об'єктів у вигляді проміжних таблиць з зовнішніми ключами.
Об'єкти із легкістю можуть містити набір значень у вигляді колекцій. Реляційні бази обмежуються полями з одним значенням. При відношенні "один до багатьох" можна використати розмітку зовнішніх ключів. Але при відношенні "багато до багатьох" немає однозначної сутності на яку би посилався зовнішній ключ.
Рішення таке ж як і в реляційних базах даних — створення проміжної сутності, яка міститиме ключі.
Нехай дані об'єкти, які представляють моделі таблиць у сховищі.
class EmployeeTable
{
public int Id { get; set; }
public string Name { get; set; }
}
class SkillTable
{
public int Id { get; set; }
public string Name { get; set; }
}
class EmployeeSkillTable
{
public int EmployeeId { get; set; }
public int SkillId { get; set; }
}
Тоді у пам'яті таку структуру можна описати наступним чином. Правда в такому випадку ускладнюється логіка відображення об'єктів у моделі даних.
class Employee
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Skill> Skills { get; set; }
}
class Skill
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Employee> Employees { get; set; }
}
Або згідно шаблону.
class Employee
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<EmployeeSkill> Skills { get; set; }
}
class Skill
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<EmployeeSkill> Employees { get; set; }
}
class EmployeeSkill
{
public int EmployeeId { get; set; }
public int SkillId { get; set; }
}
- Association Table Mapping [Архівовано 11 листопада 2020 у Wayback Machine.]