Розмітка зовнішніх ключів (шаблон проєктування) — Вікіпедія

Розмітка зовнішніх ключів (англ. Foreign Key Mapping) — шаблон проєктування, який пропонує відображати асоціації між таблицями у вигляді посилань між об'єктами.

Зв'язки між таблицями в базі даних реалізовані за допомогою зовнішніх ключів. В той час, як об'єкти посилаються один на одного за допомогою вказівників. У реляційних базах даних зберігання пов'язаних вказівниками об'єктів може призвести до порушення правил нормалізації.

Щоб зберегти граф об'єктів в сховище, необхідно перетворити ключ об'єкта за вказівником у зовнішній ключ.

Реалізація

[ред. | ред. код]

Нехай дані об'єкти, які представляють моделі таблиць у сховищі.

class AlbumTable {         public int Id { get; set; }         public string Title { get; set; }          public int ArtistId { get; set; } }  class ArtistTable {         public int Id { get; set; }         public string Name { get; set; } } 

Тоді у пам'яті таку структуру описують наступні об'єкти.

class Album {         public int Id { get; set; }         public string Title { get; set; }          public Artist Artist { get; set; } }  class Artist {         public int Id { get; set; }         public string Name { get; set; } } 

Тоді код для відображення об'єктів із пам'яті в структуру сховища та назад виглядатиме наступним чином.

class Mapper { 	public Album GetAlbum(AlbumTable albumTable, Artist artistTable) 	{ 		if (albumTable.ArtistId != artistTable.Id) throw new InvalidOperationException();  		return new Album 		{ 			Id = albumTable.Id, 			Title = albumTable.Title, 			Artist = new Artist 			{ 				Id = artistTable.Id, // albumTable.ArtistId 				Name = artistTable.Name, 			}, 		}; 	} 	 	         	public (AlbumTable, ArtistTable) GetAlbumWithArtistTable(Album album) 	{ 		var albumTable = new AlbumTable 		{ 			Id = album.Id, 			Title = album.Title, 		}; 		 		var artistTable = new ArtistTable 		{ 			Id = album.Artist.Id, 			Name = album.Artist.Name, 		}; 			 		return (albumTable, artistTable); 	} } 

Див. також

[ред. | ред. код]

Джерела

[ред. | ред. код]