8000 GitHub - stardustmeg/databases-101
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

stardustmeg/databases-101

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

22 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

databases-101

Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² Β«Databases 101Β» β€” это Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ, ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΄ΠΎ срСднСго уровня. ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡƒΡ‚ ΠΊΠ°ΠΊ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°ΠΌ, стрСмящимся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ‡Π½ΡƒΡŽ Π±Π°Π·Ρƒ, Ρ‚Π°ΠΊ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΠΌ ΠΎΡΠ²Π΅ΠΆΠΈΡ‚ΡŒ свои знания. Π—Π°ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚Π΅ΠΌΡ‹, ΠΊΠ°ΠΊ SQL-запросы, оптимизация ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. НСкоторыС Ρ‚Π΅ΠΌΡ‹ сгруппированы логичСски для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ понимания, Π° ΠΏΠ»Π°Π½, прСдставлСнный Π½ΠΈΠΆΠ΅, ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π»Π΅Π³ΠΊΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² прСдставлСнных ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°Ρ….

План

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

ER-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ER-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°?

Π‘Ρ…Π΅ΠΌΠ° Β«ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ-связь» (Ρ‚Π°ΠΊΠΆΠ΅ ERD ΠΈΠ»ΠΈ ER-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°) β€” это Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ Π±Π»ΠΎΠΊ-схСмы, Π³Π΄Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π·Π½Ρ‹Π΅ «сущности» (люди, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅) связаны ΠΌΠ΅ΠΆΠ΄Ρƒ собой Π²Π½ΡƒΡ‚Ρ€ΠΈ систСмы. ER-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ Ρ‡Π°Ρ‰Π΅ всСго ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ для проСктирования ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ рСляционных Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Π² сфСрС образования, исслСдования ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм для бизнСса. ER-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ (ΠΈΠ»ΠΈ ER-ΠΌΠΎΠ΄Π΅Π»ΠΈ) ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π½Π° стандартный Π½Π°Π±ΠΎΡ€ символов, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ, Ρ€ΠΎΠΌΠ±Ρ‹, ΠΎΠ²Π°Π»Ρ‹ ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ, для отобраТСния сущностСй, ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ связСй. Π­Ρ‚ΠΈ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ устроСны ΠΏΠΎ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ, Ρ‡Ρ‚ΠΎ ΠΈ грамматичСскиС структуры: сущности Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Ρ€ΠΎΠ»ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ…, Π° связи β€” Π³Π»Π°Π³ΠΎΠ»ΠΎΠ².

ER-diagram

ER-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ β€” «родствСнники» схСм структуры Π΄Π°Π½Π½Ρ‹Ρ… (DSD), Π³Π΄Π΅ вмСсто связСй ΠΌΠ΅ΠΆΠ΄Ρƒ самими сущностями ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ элСмСнтами Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½ΠΈΡ….

ER-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² сочСтании с Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ DFD, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ схСматично ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… процСсса ΠΈΠ»ΠΈ систСмы.

ER-diagram

Π’ ER-модСлях ΠΈ модСлях Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ Π΄ΠΎ Ρ‚Ρ€Π΅Ρ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ Π΄Π΅Ρ‚Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ:

  • ΠšΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ модСль Π΄Π°Π½Π½Ρ‹Ρ… β€” схСма Π½Π°ΠΈΠ²Ρ‹ΡΡˆΠ΅Π³ΠΎ уровня с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ количСством подробностСй. Достоинство этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² возмоТности ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰ΡƒΡŽ структуру ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ всю Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ систСмы. МСнСС ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Π΅ систСмы ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΈ Π±Π΅Π· этой ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π’ этом случаС ΠΌΠΎΠΆΠ½ΠΎ сразу ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ логичСской ΠΌΠΎΠ΄Π΅Π»ΠΈ.
  • ЛогичСская модСль Π΄Π°Π½Π½Ρ‹Ρ… содСрТит Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π½Π΅ΠΆΠ΅Π»ΠΈ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ модСль. На этом ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ сущности. ЛогичСская модСль Π½Π΅ зависит ΠΎΡ‚ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ.
  • ЀизичСская модСль Π΄Π°Π½Π½Ρ‹Ρ…: Π½Π° основС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ логичСской ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ Π΄Π²Π΅ физичСских ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π’ послСдних Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ достаточно тСхничСских подробностСй для составлСния ΠΈ внСдрСния самой Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

ΠžΠ±Ρ€Π°Ρ‰Π°Π΅ΠΌ вашС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡƒΡ€ΠΎΠ²Π½ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π° ΠΈ Π΄Π΅Ρ‚Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²ΠΈΠ΄Π°Ρ… схСм (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°Ρ… DFD), ΠΎΠ΄Π½Π°ΠΊΠΎ данная классификация отличаСтся ΠΎΡ‚ трСхсхСмного ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ПО, Π³Π΄Π΅ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ осущСствляСтся ΠΏΠΎ нСсколько ΠΈΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. ΠŸΡ€Π°Π²Π΄Π°, ΠΈΠ½ΠΎΠ³Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ ER-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ иСрархиями, Ссли Π΄ΠΈΠ·Π°ΠΉΠ½ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π²Π²Π΅Ρ€Ρ… (супСрклассы) ΠΈ Π²Π½ΠΈΠ· (подклассы).

Волько рСляционныС Π΄Π°Π½Π½Ρ‹Π΅. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ†Π΅Π»ΡŒ ER-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ β€” ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ связи ΠΈ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ элСмСнтами, поэтому ΠΎΠ½ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π΅Π»ΡΡ†ΠΈΠΎΠ½Π½ΡƒΡŽ структуру.

Волько для структурированных Π΄Π°Π½Π½Ρ‹Ρ…. Π”Π°Π½Π½Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π΅Ρ‚ΠΊΠΎ Ρ€Π°Π·Π±ΠΈΡ‚Ρ‹ Π½Π° поля, столбцы ΠΈ строки, ΠΈΠ½Π°Ρ‡Π΅ ΠΏΠΎΠ»ΡŒΠ·Ρ‹ ΠΎΡ‚ ER-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ°Π»ΠΎ. Π­Ρ‚ΠΎ касаСтся ΠΈ частично структурированных Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ER-ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… β€” нСпростая Π·Π°Π΄Π°Ρ‡Π° ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ различия Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ….

Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ ΠΈ способы Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ ERD

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π΄Π°ΡŽΡ‚ ΠΎΠ±Ρ‰Π΅Π΅ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² состав ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠšΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ER-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ€Π°Ρ‚ΡŒ Π·Π° основу логичСских ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ…. Π˜Ρ… Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для создания ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ общности ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ER-модСлями, ΠΏΠΎΠ»ΠΎΠΆΠΈΠ² ΠΈΡ… Π² основу ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ. ВсС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π½ΠΈΠΆΠ΅ символы ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… Β«Π‘ΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ-связь» для UMLΒ» ΠΈ Β«Π€ΠΈΠ³ΡƒΡ€Ρ‹ ΠΏΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈ Β«ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ-связь» Π½Π° Lucidchart.

  • Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ ERD-сущностСй

Под понятиСм «сущности» ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ»ΠΈ понятия, нСсущиС Π²Π°ΠΆΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ, ΠΎΠ½ΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Β«Ρ‚ΠΎΠ²Π°Ρ€Β», Β«ΠΊΠ»ΠΈΠ΅Π½Ρ‚Β», Β«Π·Π°Π²Π΅Π΄Π΅Π½ΠΈΠ΅Β» ΠΈΠ»ΠΈ «промоакция». НиТС прСдставлСны Ρ‚Ρ€ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнных Ρ‚ΠΈΠΏΠ° сущностСй, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² ER-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°Ρ….

ER-entities
  • Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ ERD-связСй

Бвязи ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² схСмах Β«ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ-связь» для обозначСния взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ двумя сущностями. ГрамматичСски связи, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π²Ρ‹Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π³Π»Π°Π³ΠΎΠ»Π°ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Β«Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒΒ», Β«Π·Π°ΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒΒ», Β«ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒΒ», ΠΈ нСсут ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ, ΠΎΠΏΠΈΡ€Π°ΡΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Ρ‚ΠΈΠΏΡ‹ сущностСй.

ER-relations
  • Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ ERD-Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²

ERD-Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΡŽΡ‚ сущности, позволяя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π»ΡƒΡ‡ΡˆΠ΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² устройствС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Атрибуты содСрТат ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ сущностях, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ER-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅.

ER-attributes
  • Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ физичСских ER-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ

ЀизичСская модСль Π΄Π°Π½Π½Ρ‹Ρ… β€” самый Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ER-схСм, Π³Π΄Π΅ прСдставлСн процСсс добавлСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. ЀизичСскиС ΠΌΠΎΠ΄Π΅Π»ΠΈ Β«ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ-связь» ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ всю структуру Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ названия столбцов, Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ограничСния столбцов, ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Π΅ ΠΈ внСшниС ΠΊΠ»ΡŽΡ‡ΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ† Β«ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ-связь»:

  • Поля

Поля β€” это участки Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π³Π΄Π΅ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ сущностСй. Под Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‚ΡΡ столбцы Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, которая модСлируСтся ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Β«ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ-связь».

ER-field
  • ΠšΠ»ΡŽΡ‡ΠΈ

ΠšΠ»ΡŽΡ‡ΠΈ β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· способов ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ². НапоминаСм, Ρ‡Ρ‚ΠΎ ER-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… посрСдством Ρ‚Π°Π±Π»ΠΈΡ†, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΈΠΌ ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡Π΅Π½Π½ΠΎΡΡ‚ΡŒ, ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΈ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹. Ну Π° ΠΊΠ»ΡŽΡ‡ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ с Ρ†Π΅Π»ΡŒΡŽ максимально эффСктивно ΡΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ собой Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

  • ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ

ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ β€” это Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΈΠ»ΠΈ сочСтаниС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ экзСмпляр сущности.

  • Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡ΠΈ

Π’Π½Π΅ΡˆΠ½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡ создаСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ привязываСтся ΠΊ сущности посрСдством Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠΉ ΠΈΠ»ΠΈ мноТСствСнной связи.

ER-keys

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π·Π°ΠΉΠΌ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π΄Π°Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ Π±Π°Π½ΠΊΠΎΠΌ, поэтому Π² качСствС внСшнСго ΠΊΠ»ΡŽΡ‡Π° FinancedBy (Β«ΠΊΠ΅ΠΌ Π²Ρ‹Π΄Π°Π½ Π·Π°ΠΉΠΌΒ») Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Car (Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒΒ») использован основной ΠΊΠ»ΡŽΡ‡ BankId (Β«ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π±Π°Π½ΠΊΠ°Β»).ΠŸΡ€ΠΈ этом ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ BankId ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ внСшним ΠΊΠ»ΡŽΡ‡ΠΎΠΌ сразу для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ.

  • Π’ΠΈΠΏΡ‹

Под Ρ‚ΠΈΠΏΠΎΠΌ подразумСваСтся Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΠΎΠ»Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Однако это Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ Ρ‚ΠΈΠΏ сущности, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ описаниС Π΅Π΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ…. НапримСр, Ρƒ сущности Β«ΠΊΠ½ΠΈΠ³Π°Β» Π±ΡƒΠ΄ΡƒΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹: Β«Π°Π²Ρ‚ΠΎΡ€Β», Β«Π½Π°Π·Π²Π°Π½ΠΈΠ΅Β» ΠΈ Β«Π΄Π°Ρ‚Π° ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈΒ».

ER-types

Нотация ER-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ

Π₯отя нотация Crow's Foot (Β«Π²ΠΎΡ€ΠΎΠ½ΡŒΠΈ Π»Π°ΠΏΠΊΠΈΒ») часто признаСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎΠΉ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΎΡ‚Π΄Π°ΡŽΡ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π‘Π°Ρ…ΠΌΠ°Π½Π°, OMT, IDEF ΠΈΠ»ΠΈ UML. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Β«Π²ΠΎΡ€ΠΎΠ½ΡŒΠΈ Π»Π°ΠΏΠΊΠΈΒ» Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ наглядный ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ β€” Π²ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ ΠΈΡ… для Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ ER-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ Π² Lucidchart.

ΠšΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΎΡ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

Под ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ подразумСваСтся максимальноС число связСй, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСно ΠΌΠ΅ΠΆΠ΄Ρƒ экзСмплярами Ρ€Π°Π·Π½Ρ‹Ρ… сущностСй. ΠžΡ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ минимальноС количСство связСй ΠΌΠ΅ΠΆΠ΄Ρƒ экзСмплярами Π΄Π²ΡƒΡ… сущностСй.

ΠšΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΎΡ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π½Π° ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… линиях согласно Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌΡƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ.

(Π‘Ρ‹Π²Π°ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ситуации - ΠΎΠ΄ΠΈΠ½ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ, ΠΎΠ΄ΠΈΠ½ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΈ сам ΠΏΠΎ сСбС. Π‘ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΈ послСдним всё просто - ΠΎΠ΄Π½Π° запись Π² ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ соотносится с ΠΎΠ΄Π½ΠΎΠΉ записью Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΈΠ»ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π° сама ΠΏΠΎ сСбС ΠΈ Π½ΠΈ ΠΊ Ρ‡Π΅ΠΌΡƒ Π½Π΅ относится. Один ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ это случай, ΠΊΠΎΠ³Π΄Π° запись Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ соотносится с Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠΉ записью Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, это (Ссли ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌΡƒ) Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ)

ERD-Notation

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ER-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь: Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ER-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΈ ΠΊΠ°ΠΊ Π΅Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ?

ΠšΠ»ΡŽΡ‡ΠΈ

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΏΡ€ΠΎΡ‚ΠΈΠ² внСшнСго ΠΊΠ»ΡŽΡ‡Π°

ΠšΠ»ΡŽΡ‡ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Π² рСляционном Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ связь ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅, поэтому Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄Π²Π΅ строки Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL. Π’ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ внСшний ΠΊΠ»ΡŽΡ‡ связываСт Π΄Π²Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ вмСстС.

Primary Key vs. Foreign Key

ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, слуТащий внСшним ΠΊΠ»ΡŽΡ‡ΠΎΠΌ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ, являСтся распространСнным способом обСспСчСния цСлостности Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π² ссылочной Ρ‚Π°Π±Π»ΠΈΡ†Π΅ (Ρ‚ΠΎΠΉ, Ρ‡Ρ‚ΠΎ с внСшним ΠΊΠ»ΡŽΡ‡ΠΎΠΌ) ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ссылку Π½Π° ΡΡΡ‹Π»ΠΎΡ‡Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ (с ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ). Π­Ρ‚ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ появлСниС потСрянных записСй ΠΈ обСспСчиваСт ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ всСй Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Основной ΠΊΠ»ΡŽΡ‡ (Primary Key)

ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Он содСрТится Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅. ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ столбСц ΠΈΠ»ΠΈ Π³Ρ€ΡƒΠΏΠΏΠ° столбцов. Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ, Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°Π±Π»ΠΈΡ†Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡.

НаличиС ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°:

  • Уникальная идСнтификация строк Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈΠ»ΠΈ записях для быстрого извлСчСния, обновлСния ΠΈΠ»ΠΈ удалСния.
  • ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ Π² Ρ‚Π°ΠΊΠΈΡ… Π‘Π£Π‘Π”, ΠΊΠ°ΠΊ MySQL ΠΈ Oracle, являСтся ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π°Π²Ρ‚ΠΎΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ число. Π­Ρ‚ΠΈ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… автоматичСски присваиваСт ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ записи Π½ΠΎΠ²Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€, гарантируя, Ρ‡Ρ‚ΠΎ каТдая строка ΠΈΠΌΠ΅Π΅Ρ‚ свой ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€.

Π’Π½Π΅ΡˆΠ½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡ (Foreign Key)

Π’Π½Π΅ΡˆΠ½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡ β€” это опорная Ρ‚ΠΎΡ‡ΠΊΠ° Π² рСляционной Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠ 3D11 ΎΡ‚орая устанавливаСт связи ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ, обСспСчивая ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΈ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°, ΠΎΠ½ присутствуСт Π² Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

Когда Π²Ρ‹ примСняСтС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ внСшнСго ΠΊΠ»ΡŽΡ‡Π° ΠΊ столбцу Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ столбца Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π­Ρ‚Π° связь ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π΅Π»ΡΡ†ΠΈΠΎΠ½Π½ΡƒΡŽ структуру, соСдиняя Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ эти ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово «ссылки», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ столбСц (внСшний ΠΊΠ»ΡŽΡ‡) Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π² ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΌ ΠΊΠ»ΡŽΡ‡Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π­Ρ‚ΠΎ обСспСчиваСт ΡΡΡ‹Π»ΠΎΡ‡Π½ΡƒΡŽ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ ссылок Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ.

Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡ΠΈ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‚ мноТСству потрСбностСй ΠΌΠΎΠ΄Π΅Π»ΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…:

  • Π“Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… обСспСчивая ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ, ΠΏΠΎΠ»Π½ΠΎΡ‚Ρƒ ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ связанных Ρ‚Π°Π±Π»ΠΈΡ†.
  • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ запросов, обСспСчивая эффСктивныС ΠΏΠ»Π°Π½Ρ‹ запросов, ускоряя поиск Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ связи ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ.
  • Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для установлСния связСй ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ, позволяя Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ связанныС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ

И ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Π΅, ΠΈ внСшниС ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈΠ³Ρ€Π°ΡŽΡ‚ Π²Π°ΠΆΠ½ΡƒΡŽ, Π½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠΈ цСлостности Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ установлСнии Π·Π½Π°Ρ‡ΠΈΠΌΡ‹Ρ… связСй Π² Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Π₯отя ΠΎΠ±Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ Ρ‚ΠΎΡ‡Π΅ΠΊ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ½ΠΈ слуТат Ρ€Π°Π·Π½Ρ‹ΠΌ цСлям ΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ характСристиками. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Π΅ ΠΈ внСшниС ΠΊΠ»ΡŽΡ‡ΠΈ ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ нСскольким ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ Ρ„Π°ΠΊΡ‚ΠΎΡ€Π°ΠΌ:

  • ЦСль:
    ЕдинствСнная Ρ†Π΅Π»ΡŒ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° β€” ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ идСнтификация ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Напротив, внСшний ΠΊΠ»ΡŽΡ‡ ссылаСтся Π½Π° ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, устанавливая связь ΠΈ позволяя ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†. Π­Ρ‚ΠΎ позволяСт Π²Π°ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΠΎΠ±Π·ΠΎΡ€ Π² вашСй Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….
  • Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ:
    ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Π”ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ – ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи Π½ΡƒΠΆΠ΅Π½ свой ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€.
    Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ для внСшнСго ΠΊΠ»ΡŽΡ‡Π°. Но ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΌ ΠΊΠ»ΡŽΡ‡Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚. Он ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ сторонС.
  • ΠžΠ±Π½ΡƒΠ»ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ:
    НулСвыС значСния ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Π² ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΌ ΠΊΠ»ΡŽΡ‡Π΅. КаТдой записи Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ отсутствиС ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρƒ ΠΏΡ€ΠΈ ссылкС Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ….
    Π’ зависимости ΠΎΡ‚ связи ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ внСшний ΠΊΠ»ΡŽΡ‡ допускаСт Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ значСния. НапримСр, Π·Π°ΠΊΠ°Π· ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ внСшний ΠΊΠ»ΡŽΡ‡, ΡΡΡ‹Π»Π°ΡŽΡ‰ΠΈΠΉΡΡ Π½Π° «адрСс доставки», Π½ΠΎ ΠΏΠΎΠ»Π΅ адрСса Π±ΡƒΠ΄Π΅Ρ‚ пустым, Ссли Π·Π°ΠΊΠ°Π· Π΅Ρ‰Π΅ Π½Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½.
  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠ΅ цСлостности Π΄Π°Π½Π½Ρ‹Ρ…:
    По своСй ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ обСспСчиваСт Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…. ΠΎΠ΄Π½ΠΎΠΉ свой стол. Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ отсутствиС ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ записСй, Π° отсутствиС Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ отсутствиС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ².
    Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎ Π²Π°ΠΆΠ½Ρ‹ для поддСрТания цСлостности Π΄Π°Π½Π½Ρ‹Ρ…. Ρ‡Π΅Ρ€Π΅Π· столы. Бсылка Π½Π° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ появлСниС потСрянных записСй (записСй с внСшними Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΠΌ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ Π² ссылочной Ρ‚Π°Π±Π»ΠΈΡ†Π΅). Π­Ρ‚ΠΈ создаСт ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ связСй Π²Π½ΡƒΡ‚Ρ€ΠΈ вашСй Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ обновлСния ΠΈ удалСния:
    Из-Π·Π° своСй Ρ€ΠΎΠ»ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для ΡƒΠΌΠ΅Ρ€Π΅Π½Π½ΠΎΠ³ΠΎ обновлСния. ИзмСнСниС значСния ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ связи с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ.
    ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ значСния внСшнСго ΠΊΠ»ΡŽΡ‡Π°, Ссли Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ остаСтся Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Однако ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ записи Π² ссылочной Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ значСния внСшнСго ΠΊΠ»ΡŽΡ‡Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†, Π² зависимости ΠΎΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ссылочной цСлостности.

ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΈ внСшний ΠΊΠ»ΡŽΡ‡: 9 Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ

Основной ΠΊΠ»ΡŽΡ‡ Π’Π½Π΅ΡˆΠ½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡
Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ† ΠΈΠ»ΠΈ Π½Π°Π±ΠΎΡ€ столбцов, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ† ΠΈΠ»ΠΈ нСсколько столбцов Π² ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ссылаСтся Π½Π° ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅.
Π”ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния; Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹ Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ. ΠœΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ значСния; ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ относится ΠΊ значСниям ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅.
Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ имССтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡. Π’ зависимости ΠΎΡ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ.
ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (каТдая строка ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ идСнтифицируСтся). УстанавливаСт ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΡΡ‹Π»ΠΎΡ‡Π½ΡƒΡŽ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ связанными Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ.
По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ автоматичСски индСксируСтся (Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Π‘Π£Π‘Π”). ΠœΠΎΠΆΠ΅Ρ‚ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ автоматичСски, Π½ΠΎ это Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ; индСкс рСкомСндуСтся для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.
ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это числовой ΠΈΠ»ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. БоотвСтствуСт Ρ‚ΠΈΠΏΡƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ ссылаСтся.
ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° обСспСчиваСт ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π½Π΅ являСтся Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ внСшнСго ΠΊΠ»ΡŽΡ‡Π° обСспСчиваСт ΡΡΡ‹Π»ΠΎΡ‡Π½ΡƒΡŽ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ (значСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅).
Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ строк ΠΏΡ€ΠΈ объСдинСнии Ρ‚Π°Π±Π»ΠΈΡ†. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для установлСния связСй ΠΈ обСспСчСния соблюдСния ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π²ΠΎ врСмя соСдинСний.
ИзмСнСния ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹, Ссли ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π³Π΄Π΅-Ρ‚ΠΎ упоминаСтся ΠΊΠ°ΠΊ внСшний ΠΊΠ»ΡŽΡ‡ (Π² зависимости ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² каскада). ЗначСния ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ каскадных ΠΎΠΏΡ†ΠΈΠΉ для поддСрТания ссылочной цСлостности.

Π’ΠΈΠΏ ΠšΠ»ΡŽΡ‡Π΅ΠΉ Π² МодСль рСляционной Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… (Π‘Π£Π‘Π”)

Говоря ΠΎ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… ΠΈ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π°Ρ…, Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ нСсколько Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π² систСмС управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ рСализация этих ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π² SQL для ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π°Π½Π°Π»ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ идСнтификация этих ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

Key Types
  1. ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡
    ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π² Π‘Π£Π‘Π” β€” это ΠΎΠ΄ΠΈΠ½ столбСц ΠΈΠ»ΠΈ комбинация столбцов Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ запись Π² этой Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Π’Π°Π±Π»ΠΈΡ†Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния Π±Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ Π²ΠΎ всСх строках.

  2. Π‘ΡƒΠΏΠ΅Ρ€ΠΊΠ»ΡŽΡ‡
    Π‘ΡƒΠΏΠ΅Ρ€ΠΊΠ»ΡŽΡ‡ β€” это ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΡŽΡ‡ ΠΈΠ»ΠΈ Π³Ρ€ΡƒΠΏΠΏΠ° ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ любая комбинация столбцов, которая ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ опрСдСляСт всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ столбцы Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, квалифицируСтся ΠΊΠ°ΠΊ ΡΡƒΠΏΠ΅Ρ€ΠΊΠ»ΡŽΡ‡. Π‘ΡƒΠΏΠ΅Ρ€ ΠΊΠ»ΡŽΡ‡ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строки. Из этих ΡΡƒΠΏΠ΅Ρ€ΠΊΠ»ΡŽΡ‡Π΅ΠΉ выбираСтся ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

  3. ΠšΠ»ΡŽΡ‡ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Π°
    ΠšΠ»ΡŽΡ‡ΠΈ-ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Ρ‹ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ строки Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, дСйствуя Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ с Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ свойствами. Π’Π°Π±Π»ΠΈΡ†Π° Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ свой ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΈΠ· числа Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. Π₯отя ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько, Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым, Ρ‡Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… нСсСт ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ. Π“Ρ€ΡƒΠΏΠΏΠ° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ вмСстС Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π² качСствС ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ.

  4. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡
    Π’Π°Π±Π»ΠΈΡ†Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ΠΎΠ² Π½Π° ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡, Π½ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ. ΠšΠ»ΡŽΡ‡ΠΈ, Π½Π΅ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ Π² качСствС ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ.

  5. Π’Π½Π΅ΡˆΠ½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡
    Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡ΠΈ ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ Π΄Π²Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, трСбуя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΌ столбцС ΠΈΠ»ΠΈ столбцС соотвСтствовало ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ссылочной Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Они ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ связи ΠΌΠ΅ΠΆΠ΄Ρƒ связанной, Π½ΠΎ Π½Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ.

  6. Боставной ΠΊΠ»ΡŽΡ‡
    Боставной ΠΊΠ»ΡŽΡ‡ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π΄Π²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° для ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π₯отя эти Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π F438 Έ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ, ΠΈΡ… сочСтаниС Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π­Ρ‚ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ Ρ‚Π°ΠΊΠΆΠ΅ извСстСн ΠΊΠ°ΠΊ составной ΠΊΠ»ΡŽΡ‡.

  7. Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡
    Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡, состоящий ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… столбцов, ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, поэтому всС значСния ΠΊΠ»ΡŽΡ‡Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°, ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π½Π΅ допускаСт Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

Π’ Π‘Π£Π‘Π” ΠΏΠΎΠΌΠΈΠΌΠΎ сСми стандартных Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠ»ΡŽΡ‡Π΅ΠΉ сущСствуСт Π΅Ρ‰Π΅ Ρ‚ΠΈΠΏ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ искусствСнными ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ. Π˜ΡΠΊΡƒΡΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΈΠ»ΠΈ суррогатный ΠΊΠ»ΡŽΡ‡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π΄Π΅Π»ΠΎΠ²ΠΎΠ³ΠΎ значСния ΠΈΠ»ΠΈ значСния. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΎΠ½ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° Π½ΠΈ ΠΎΠ΄ΠΈΠ½ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π΅ соотвСтствуСт основным критичСским критСриям ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ становятся слишком слоТными.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ПониманиС Ρ€ΠΎΠ»ΠΈ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… ΠΈ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для поддСрТания Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΈ эффСктивной рСляционной Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. ЭффСктивная рСализация этих ΠΊΠ»ΡŽΡ‡Π΅ΠΉ позволяСт Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½ΠΎΠΉ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ, Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒΡŽ. Они Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ°ΡŽΡ‚ процСссы управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΎ ΠΊΠ»ΡŽΡ‡Π°Ρ… Π½Π° практичСских ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… PostgreSQL ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΈΜ†Ρ‚ΠΈ здСсь: https://habr.com/ru/articles/787374/

ΠΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

Нормализация Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…

Π’ рСляционных Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ понятия, ΠΊΠ°ΠΊ «Нормализация».

Нормализация – это процСсс удалСния ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Π’Π°ΠΊΠΆΠ΅ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ проСктирования Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π² Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Нормализация – это ΠΌΠ΅Ρ‚ΠΎΠ΄ проСктирования Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт привСсти Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊ минимальной избыточности.

Π˜Π·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ устраняСтся, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π·Π° счёт Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ (Ρ‚Π°Π±Π»ΠΈΡ†), Ρ‚.Π΅. разбиСния ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π° нСсколько.

Π—Π°Ρ‡Π΅ΠΌ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…?

Π˜Π·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… создаСт прСдпосылки для появлСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ, сниТаСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π½Π΅ Π³ΠΈΠ±ΠΊΠΈΠΌ ΠΈ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ. Нормализация Π½ΡƒΠΆΠ½Π° для:

  • УстранСния Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ
  • ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ
  • ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ удобства управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ

Π˜Π·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… – это ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ хранятся Π² Π±Π°Π·Π΅ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… мСстах, ΠΈΠΌΠ΅Π½Π½ΠΎ это ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ аномалиям.

Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² этом случаС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ, ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… мСстах. НапримСр, Ссли Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π² ΠΊΠ°ΠΊΠΎΠΌ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΎΠ΄Π½ΠΎΠΌ мСстС, Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ситуация, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π²Ρ€ΠΎΠ΄Π΅ ΠΊΠ°ΠΊ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹ΠΌ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π° Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°Ρ… ΠΌΠ΅Π±Π΅Π»ΠΈ (Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ ΠΈΠ·Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½).

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° НаимСнованиС ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»
1 Π‘Ρ‚ΡƒΠ» ΠœΠ΅Ρ‚Π°Π»Π»
2 Π‘Ρ‚ΠΎΠ» Массив Π΄Π΅Ρ€Π΅Π²Π°
3 ΠšΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π›Π”Π‘ΠŸ
4 Π¨ΠΊΠ°Ρ„ Массив Π΄Π΅Ρ€Π΅Π²Π°
5 Комод Π›Π”Π‘ΠŸ

Допустим, Ρƒ нас Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°, вмСсто «Массив Π΄Π΅Ρ€Π΅Π²Π°Β» Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Β«ΠΠ°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎΒ». Π§Ρ‚ΠΎΠ±Ρ‹ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ внСсти измСнСния сразу Π² нСсколько строк, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ², ΠΈΠ·Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠ· массива Π΄Π΅Ρ€Π΅Π²Π°, нСсколько.

По ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ ΠΌΡ‹ внСсли измСнСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½Ρƒ строку. Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π² нашСй Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈ «Массив Π΄Π΅Ρ€Π΅Π²Π°Β», ΠΈ Β«ΠΠ°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎΒ».

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° НаимСнованиС ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»
1 Π‘Ρ‚ΡƒΠ» ΠœΠ΅Ρ‚Π°Π»Π»
2 Π‘Ρ‚ΠΎΠ» ΠΠ°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ
3 ΠšΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π›Π”Π‘ΠŸ
4 Π¨ΠΊΠ°Ρ„ Массив Π΄Π΅Ρ€Π΅Π²Π°
5 Комод Π›Π”Π‘ΠŸ

Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ внСсти Π΅Ρ‰Π΅ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²Ρ‹Ρ… записСй, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, просто Β«Π”Π΅Ρ€Π΅Π²ΠΎΒ».

Π’ этом случаС Π² нашСй Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π² скором Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈ «Массив Π΄Π΅Ρ€Π΅Π²Π°Β», ΠΈ Β«ΠΠ°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎΒ», ΠΈ просто Β«Π”Π΅Ρ€Π΅Π²ΠΎΒ».

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° НаимСнованиС ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»
1 Π‘Ρ‚ΡƒΠ» ΠœΠ΅Ρ‚Π°Π»Π»
2 Π‘Ρ‚ΠΎΠ» ΠΠ°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ
3 ΠšΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π›Π”Π‘ΠŸ
4 Π¨ΠΊΠ°Ρ„ Массив Π΄Π΅Ρ€Π΅Π²Π°
5 Комод Π›Π”Π‘ΠŸ
6 Π’ΡƒΠΌΠ±Π° Π”Π΅Ρ€Π΅Π²ΠΎ

Однако ΠΏΠΎ своСй сути это ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», Ρ‚.ΠΊ. ΠΌΡ‹ ошиблись ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠΉ записи. Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ аномалия, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹ΠΌ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС. Π­Ρ‚ΠΎ всСго лишь ΠΎΠ΄ΠΈΠ½ Π²ΠΈΠ΄ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ, Π½ΠΎ Π² процСссС добавлСния, измСнСния ΠΈ удалСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²Ρ‹Ρ… ситуаций (Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ).

ИмСнно поэтому ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Π°Π·Π΅, Ρ‚.Π΅. ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ случаС ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠ·Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Ρ‹ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ ΠΌΠ΅Π±Π΅Π»ΠΈ, вынСсти Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Π° Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ с ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°ΠΌΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ссылку Π½Π° Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π». Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, соотнСся эту ссылку с исходной записью, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΈΠ· ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° сдСлан Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚.

ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ ΠΌΠ΅Π±Π΅Π»ΠΈ.

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° НаимСнованиС ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°
1 Π‘Ρ‚ΡƒΠ» 2
2 Π‘Ρ‚ΠΎΠ» 1
3 ΠšΡ€ΠΎΠ²Π°Ρ‚ΡŒ 3
4 Π¨ΠΊΠ°Ρ„ 1
5 Комод 3

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ·Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Ρ‹ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ ΠΌΠ΅Π±Π΅Π»ΠΈ.

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»
1 Массив Π΄Π΅Ρ€Π΅Π²Π°
2 ΠœΠ΅Ρ‚Π°Π»Π»
3 Π›Π”Π‘ΠŸ

Π’ этом случаС ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ потрСбуСтся ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π²Π½ΠΎΡΠΈΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС ΠΈ устраним ΠΎΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ аномалию.

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, каТдая ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Π° Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ, Π° Π² случаС нСобходимости использования этой сущности Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½Π° Π½Π΅Π΅ даётся ссылка, Ρ‚.Π΅. выстраиваСтся связь.

ΠΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Π’ Ρ†Π΅Π»ΠΎΠΌ процСсс Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: ΠΌΡ‹, слСдуя ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ ΠΈ соблюдая ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ трСбования, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΡ€ΠΈ этом всС эти ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈ трСбования ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² нСсколько Π½Π°Π±ΠΎΡ€ΠΎΠ², ΠΈ Ссли ΡΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… с соблюдСниСм всСх ΠΏΡ€Π°Π²ΠΈΠ» ΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ Π½Π°Π±ΠΎΡ€, Ρ‚ΠΎ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌ состоянии, Ρ‚.Π΅. Ρ„ΠΎΡ€ΠΌΠ΅.

ΠΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… – это Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ» ΠΈ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅Π², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ….

КаТдая ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° содСрТит Π±ΠΎΠ»Π΅Π΅ строгиС ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ, Ρ‚Π΅ΠΌ самым приводя Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ ΠΌΡ‹ устраняСм ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ.

ΠžΡ‚ΡΡŽΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄, Ρ‡Ρ‚ΠΎ Ρ‡Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ°, Ρ‚Π΅ΠΌ мСньшС Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ Π² Π±Π°Π·Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ – это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ процСсс привСдСния Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊ эталонному Π²ΠΈΠ΄Ρƒ, Ρ‚.Π΅. ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ.

Π’Π°ΠΊ процСсс ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ – это ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊ ΠΊΠ°ΠΊ Ссли Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… находится Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ – это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… отсутствуСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π²ΠΈΠ΄ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ.

БущСствуСт 5 основных Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…:

  1. ΠŸΠ΅Ρ€Π²Π°Ρ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (1NF)
  2. Вторая Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (2NF)
  3. Π’Ρ€Π΅Ρ‚ΡŒΡ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (3NF)
  4. ЧСтвСртая Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (4NF)
  5. ΠŸΡΡ‚Π°Ρ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (5NF)

Однако Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ Π΅Ρ‰Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹:

  • НСнормализованная Ρ„ΠΎΡ€ΠΌΠ° ΠΈΠ»ΠΈ нулСвая Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (UNF)
  • ΠΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° Бойса-Кодда (BCNF)
  • Π”ΠΎΠΌΠ΅Π½Π½ΠΎ-ΠΊΠ»ΡŽΡ‡Π΅Π²Π°Ρ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (DKNF)
  • ШСстая Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (6NF)

Если ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΎΠ±Π° этих списка ΠΈ ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΎΡ‚ ΠΌΠ΅Π½Π΅Π΅ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π΄ΠΎ самой Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ, Ρ‚.Π΅. начиная с Ρ„ΠΎΡ€ΠΌΡ‹, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ своСй сути Π½Π΅ являСтся Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ, ΠΈ заканчивая самой строгой Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ, Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ:

  1. НСнормализованная Ρ„ΠΎΡ€ΠΌΠ° ΠΈΠ»ΠΈ нулСвая Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (UNF)
  2. ΠŸΠ΅Ρ€Π²Π°Ρ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (1NF)
  3. Вторая Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (2NF)
  4. Π’Ρ€Π΅Ρ‚ΡŒΡ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (3NF)
  5. ΠΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° Бойса-Кодда (BCNF)
  6. ЧСтвСртая Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (4NF)
  7. ΠŸΡΡ‚Π°Ρ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (5NF)
  8. Π”ΠΎΠΌΠ΅Π½Π½ΠΎ-ΠΊΠ»ΡŽΡ‡Π΅Π²Π°Ρ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (DKNF)
  9. ШСстая Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (6NF)

Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… считаСтся Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ, Ссли ΠΎΠ½Π° находится ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ (3NF).

Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΈΡ€Π΅ нормализация Π΄ΠΎ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ (3NF) являСтся ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ, стандартной ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ 3NF устраняСт достаточноС количСство Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ, ΠΏΡ€ΠΈ этом ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ удобство Π΅Π΅ использования Π½Π΅ сниТаСтся, Ρ‡Ρ‚ΠΎ нСльзя ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ всСх ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ….

Π‘ΠΈΡ‚ΡƒΠ°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… трСбуСтся Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ (4NF), Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΈΡ€Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ достаточно Ρ€Π΅Π΄ΠΊΠΎ.

Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ всСх ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ… (5NF, DKNF, 6NF), Ρ‚ΠΎ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π°ΠΆΠ΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ситуации, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… потрСбуСтся Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎ этих Ρ„ΠΎΡ€ΠΌ.

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ эта Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΡƒΠΆΠ΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅, Ρ‚.Π΅. нСльзя Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ Ρ„ΠΎΡ€ΠΌΡ‹, Ссли ΠΎΠ½Π° Π΅Ρ‰Π΅ Π½Π΅ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π΄ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ.

1. НСнормализованная Ρ„ΠΎΡ€ΠΌΠ° ΠΈΠ»ΠΈ нулСвая Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (UNF) Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

НСнормализованная Ρ„ΠΎΡ€ΠΌΠ° (UNF) Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠ»ΠΈ нулСвая Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ°, прСдставляСт собой структуру Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ рСляционной Ρ‚Π΅ΠΎΡ€ΠΈΠΈ. Π’ Ρ‚Π°ΠΊΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‚ΡΡ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ рСляционных Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…: строки ΠΈ столбцы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ упорядочСны, Ρ‡Ρ‚ΠΎ нСдопустимо Π² рСляционной ΠΌΠΎΠ΄Π΅Π»ΠΈ.

Нормализация начинаСтся послС привСдСния Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΊ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ рСляционной Ρ‚Π΅ΠΎΡ€ΠΈΠΈ, устранив порядок строк ΠΈ столбцов.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Π”ΠΎ:

β„– A B
1 Иван Иванов
2 Π‘Π΅Ρ€Π³Π΅ΠΉ Π‘Π΅Ρ€Π³Π΅Π΅Π²

ПослС:

first_name last_name
Иван Иванов
Π‘Π΅Ρ€Π³Π΅ΠΉ Π‘Π΅Ρ€Π³Π΅Π΅Π²

2. ΠŸΠ΅Ρ€Π²Π°Ρ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (1NF) Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΠ΅Ρ€Π²Π°Ρ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (1NF) Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π°Π±Π»ΠΈΡ†Π° соотвСтствовала рСляционной ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…:

  • НСт Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… строк.
  • Π―Ρ‡Π΅ΠΉΠΊΠΈ содСрТат Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Π΅ значСния.
  • Π”Π°Π½Π½Ρ‹Π΅ Π² столбцС ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.
  • НСт списков ΠΈΠ»ΠΈ массивов Π² ячСйках.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Π”ΠΎ (Π½Π΅ Π² 1NF):

Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ ΠšΠΎΠ½Ρ‚Π°ΠΊΡ‚
Иванов И.И. 123-456-789, 987-654-321
Π‘Π΅Ρ€Π³Π΅Π΅Π² Π‘.Π‘. Π Π°Π±. 555-666-777, Π”ΠΎΠΌ. 777-888-999

ПослС (в 1NF):

Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ Π’Π΅Π»Π΅Ρ„ΠΎΠ½ Π’ΠΈΠΏ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°
Иванов И.И. 123-456-789
Иванов И.И. 987-654-321
Π‘Π΅Ρ€Π³Π΅Π΅Π² Π‘.Π‘. 555-666-777 Π Π°Π±ΠΎΡ‡ΠΈΠΉ
Π‘Π΅Ρ€Π³Π΅Π΅Π² Π‘.Π‘. 777-888-999 Π”ΠΎΠΌΠ°ΡˆΠ½ΠΈΠΉ

Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ 1NF:

  • Π‘Ρ‚Ρ€ΠΎΠΊΠΈ хранят Π΄Π°Π½Π½Ρ‹Π΅.
  • Π‘Ρ‚ΠΎΠ»Π±Ρ†Ρ‹ содСрТат ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.
  • Π―Ρ‡Π΅ΠΉΠΊΠΈ содСрТат ΠΎΠ΄Π½ΠΎ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π’Π°Π±Π»ΠΈΡ†Ρ‹, созданныС ΠΏΠΎ рСляционной Ρ‚Π΅ΠΎΡ€ΠΈΠΈ, ΡƒΠΆΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ 1NF.

3. Вторая Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (2NF) Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

ПослС привСдСния Ρ‚Π°Π±Π»ΠΈΡ† ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ (1NF), ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ этап Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ – достиТСниС Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ (2NF). Π’Π°Π±Π»ΠΈΡ†Ρ‹ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ трСбованиям:

ВрСбования 2NF:

  1. ΠŸΠ΅Ρ€Π²Π°Ρ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (1NF): Π’Π°Π±Π»ΠΈΡ†Ρ‹ ΡƒΠΆΠ΅ находятся Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅.
  2. ΠšΠ»ΡŽΡ‡: Π’Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ (простой ΠΈΠ»ΠΈ составной), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку.
  3. Полная Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡Π°: ВсС Π½Π΅ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ столбцы зависят ΠΎΡ‚ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° (Ссли ΠΎΠ½ составной).

Если Π½Π΅ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ столбцы зависят Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ части составного ΠΊΠ»ΡŽΡ‡Π°, Ρ‚ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π° Π½Π΅ соотвСтствуСт Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅.


ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ 2NF:

Π’Π°Π±Π»ΠΈΡ†Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку, ΠΈ всС Π½Π΅ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ столбцы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ зависимы ΠΎΡ‚ всСго ΠΊΠ»ΡŽΡ‡Π°, Π° Π½Π΅ ΠΎΡ‚ Π΅Π³ΠΎ части.


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ привСдСния Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΊ 2NF с простым ΠΊΠ»ΡŽΡ‡ΠΎΠΌ

Рассмотрим Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ сотрудников:

ЀИО Π”ΠΎΠ»ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠŸΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ОписаниС подраздСлСния
Иванов И.И. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ ΠžΡ‚Π΄Π΅Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ сопровоТдСниС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
Π‘Π΅Ρ€Π³Π΅Π΅Π² Π‘.Π‘. Π‘ΡƒΡ…Π³Π°Π»Ρ‚Π΅Ρ€ БухгалтСрия Π’Π΅Π΄Π΅Π½ΠΈΠ΅ бухгалтСрского ΡƒΡ‡Π΅Ρ‚Π°
John Smith ΠŸΡ€ΠΎΠ΄Π°Π²Π΅Ρ† ΠžΡ‚Π΄Π΅Π» Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ сбыта ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ

Π­Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° находится Π² 1NF, Π½ΠΎ Ρƒ Π½Π΅Π΅ Π½Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°. Π§Ρ‚ΠΎΠ±Ρ‹ привСсти Π΅Π΅ ΠΊΠΎ 2NF, добавляСм столбСц с ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ:

Π’Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ ЀИО Π”ΠΎΠ»ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠŸΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ОписаниС подраздСлСния
1 Иванов И.И. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ ΠžΡ‚Π΄Π΅Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ сопровоТдСниС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
2 Π‘Π΅Ρ€Π³Π΅Π΅Π² Π‘.Π‘. Π‘ΡƒΡ…Π³Π°Π»Ρ‚Π΅Ρ€ БухгалтСрия Π’Π΅Π΄Π΅Π½ΠΈΠ΅ бухгалтСрского ΡƒΡ‡Π΅Ρ‚Π°
3 John Smith ΠŸΡ€ΠΎΠ΄Π°Π²Π΅Ρ† ΠžΡ‚Π΄Π΅Π» Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ сбыта ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ»ΡŽΡ‡ здСсь простой, Ρ‚Π°Π±Π»ΠΈΡ†Π° автоматичСски соотвСтствуСт трСбованиям 2NF.


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ привСдСния Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΊ 2NF с составным ΠΊΠ»ΡŽΡ‡ΠΎΠΌ

Допустим, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… ΠΈ участниках.

Π˜ΡΡ…ΠΎΠ΄Π½Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π° (1NF):

НазваниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Участник Π”ΠΎΠ»ΠΆΠ½ΠΎΡΡ‚ΡŒ Π‘Ρ€ΠΎΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (мСс.)
Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ прилоТСния Иванов И.И. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ 8
Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ прилоТСния Π‘Π΅Ρ€Π³Π΅Π΅Π² Π‘.Π‘. Π‘ΡƒΡ…Π³Π°Π»Ρ‚Π΅Ρ€ 8
Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ прилоТСния John Smith ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ 8
ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° Π‘Π΅Ρ€Π³Π΅Π΅Π² Π‘.Π‘. Π‘ΡƒΡ…Π³Π°Π»Ρ‚Π΅Ρ€ 12
ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° John Smith ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ 12

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°:

  • ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ состоит ΠΈΠ· Π΄Π²ΡƒΡ… столбцов: НазваниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° + Участник.
  • Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ† Π”ΠΎΠ»ΠΆΠ½ΠΎΡΡ‚ΡŒ зависит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ Участника, Π° Π½Π΅ ΠΎΡ‚ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°.

РСшСниС:

ВыполняСм Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹:

ДСкомпозиция – это процСсс разбиСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ (Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹) Π½Π° нСсколько.

  1. Π’Π°Π±Π»ΠΈΡ†Π° "ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹":

    Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° НазваниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π‘Ρ€ΠΎΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (мСс.)
    1 Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ прилоТСния 8
    2 ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° 12
  2. Π’Π°Π±Π»ΠΈΡ†Π° "Участники":

    Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ участника Участник Π”ΠΎΠ»ΠΆΠ½ΠΎΡΡ‚ΡŒ
    1 Иванов И.И. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚
    2 Π‘Π΅Ρ€Π³Π΅Π΅Π² Π‘.Π‘. Π‘ΡƒΡ…Π³Π°Π»Ρ‚Π΅Ρ€
    3 John Smith ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€
  3. Бвязь ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ участниками:

    Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ участника
    1 1
    1 2
    1 3
    2 2
    2 3

ΠœΡ‹ создали 3 Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹:

  1. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, Π² Π½Π΅Π΅ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ искусствСнный ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡
  2. Участники, Π² Π½Π΅Π΅ ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ искусствСнный ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡
  3. Бвязь ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ участниками, ΠΎΠ½Π° Π½ΡƒΠΆΠ½Π° для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ связи «МногиС ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ», Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ этими Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ связь ΠΈΠΌΠ΅Π½Π½ΠΎ такая

ПослС Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‚ трСбованиям Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹:

  • Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° (столбца) Π΅ΡΡ‚ΡŒ полная Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡Π°.
  • Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ частичныС зависимости.

--

Π’Ρ‹Π²ΠΎΠ΄

Вторая Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° устраняСт частичныС зависимости, Ρ‡Ρ‚ΠΎΠ±Ρ‹ структура Ρ‚Π°Π±Π»ΠΈΡ† стала Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΉ ΠΈ устойчивой ΠΊ аномалиям. Для достиТСния 2NF ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ шаги:

  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ (простыС ΠΈΠ»ΠΈ составныС).
  • Π Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Ссли Π΅ΡΡ‚ΡŒ частичная Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ.
  • ВвСсти искусствСнныС ΠΊΠ»ΡŽΡ‡ΠΈ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ связи ΠΌΠ΅ΠΆΠ΄Ρƒ сущностями.

4. Π’Ρ€Π΅Ρ‚ΡŒΡ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (3NF)

ЦСль: УстранСниС Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… зависимостСй, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ столбцы зависСли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°.

Вранзитивная Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ – это ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ столбцы зависят ΠΎΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π½Π΅ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… столбцов.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ трСбования 3NF:

  1. Π’Π°Π±Π»ΠΈΡ†Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ (2NF).
  2. ВсС Π½Π΅ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ столбцы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° (Π½ΠΈΠΊΠ°ΠΊΠΈΡ… зависимостСй ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π΅ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ столбцами).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Π˜ΡΡ…ΠΎΠ΄Π½Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π° (2NF):

Π’Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ ЀИО Π”ΠΎΠ»ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠŸΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ОписаниС подраздСлСния
1 Иванов И.И. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ ΠžΡ‚Π΄Π΅Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ сайтов
2 Π‘Π΅Ρ€Π³Π΅Π΅Π² Π‘.Π‘. Π‘ΡƒΡ…Π³Π°Π»Ρ‚Π΅Ρ€ БухгалтСрия Π£Ρ‡Π΅Ρ‚ финансово-хозяйствСнной Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ
3 John Smith ΠŸΡ€ΠΎΠ΄Π°Π²Π΅Ρ† ΠžΡ‚Π΄Π΅Π» Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ сбыта ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ
  • ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: "ОписаниС подраздСлСния" зависит Π½Π΅ ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°, Π° ΠΎΡ‚ "ΠŸΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ" β€” это транзитивная Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ.

РСшСниС:

РаздСляСм Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π½Π° Π΄Π²Π΅:

  1. Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊΠΈ:

    Π’Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ ЀИО Π”ΠΎΠ»ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠŸΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅
    1 Иванов И.И. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ 1
    2 Π‘Π΅Ρ€Π³Π΅Π΅Π² Π‘.Π‘. Π‘ΡƒΡ…Π³Π°Π»Ρ‚Π΅Ρ€ 2
    3 John Smith ΠŸΡ€ΠΎΠ΄Π°Π²Π΅Ρ† 3
  2. ΠŸΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ:

    Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ подраздСлСния ΠŸΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ОписаниС подраздСлСния
    1 ΠžΡ‚Π΄Π΅Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ сайтов
    2 БухгалтСрия Π£Ρ‡Π΅Ρ‚ финансово-хозяйствСнной Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ
    3 ΠžΡ‚Π΄Π΅Π» Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ сбыта ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ зависимости устранСны, ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ трСбованиям 3NF.

5. ΠΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° Бойса-Кодда (BCNF)

ЦСль: УстранСниС зависимостСй, Π³Π΄Π΅ Ρ‡Π°ΡΡ‚ΡŒ составного ΠΊΠ»ΡŽΡ‡Π° зависит ΠΎΡ‚ Π½Π΅ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ столбца.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ трСбования BCNF:

  1. Π’Π°Π±Π»ΠΈΡ†Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ (3NF).
  2. Никакая Ρ‡Π°ΡΡ‚ΡŒ составного ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Π½Π΅ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… столбцов.

ΠšΠ»ΡŽΡ‡Π΅Π²Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°:

BCNF трСбуСтся, Ссли Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ составной ΠΊΠ»ΡŽΡ‡ ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ зависимости ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π° ΠΈ Π½Π΅ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ столбцами. Для Ρ‚Π°Π±Π»ΠΈΡ† с простыми ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ, находящихся Π² 3NF, BCNF выполняСтся автоматичСски.


ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Π˜ΡΡ…ΠΎΠ΄Π½Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π°:

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ НаправлСниС ΠšΡƒΡ€Π°Ρ‚ΠΎΡ€
1 Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Иванов И.И.
1 БухгалтСрия Π‘Π΅Ρ€Π³Π΅Π΅Π² Π‘.Π‘.
2 Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Иванов И.И.
2 БухгалтСрия ΠŸΠ΅Ρ‚Ρ€ΠΎΠ² П.П.
2 РСализация John Smith
3 Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° АндрССв А.А.
  • ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: НаправлСниС зависит ΠΎΡ‚ "ΠšΡƒΡ€Π°Ρ‚ΠΎΡ€Π°" β€” Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ BCNF.

РСшСниС:

РаздСляСм Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π½Π° Π΄Π²Π΅:

  1. ΠšΡƒΡ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ ΠΈΡ… направлСния:

    Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΊΡƒΡ€Π°Ρ‚ΠΎΡ€Π° ЀИО НаправлСниС
    1 Иванов И.И. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°
    2 Π‘Π΅Ρ€Π³Π΅Π΅Π² Π‘.Π‘. БухгалтСрия
    3 ΠŸΠ΅Ρ‚Ρ€ΠΎΠ² П.П. БухгалтСрия
    4 John Smith РСализация
    5 АндрССв А.А. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°
  2. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΈΡ… ΠΊΡƒΡ€Π°Ρ‚ΠΎΡ€Ρ‹:

    ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΊΡƒΡ€Π°Ρ‚ΠΎΡ€Π°
    1 1
    1 2
    2 1
    2 3
    2 4
    3 5

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ устранСна, ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ трСбованиям BCNF.

N.B.

Нормализация ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π³Π΄Π΅-Ρ‚ΠΎ Π΄ΠΎ 3 Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹. Начиная с 4 Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ½ΠΈΠΆΠ°Ρ‚ΡŒΡΡ, Π½Π΅ говоря ΡƒΠΆΠ΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ с Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎ 5 ΠΈΠ»ΠΈ 6 Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΡ€Π°ΠΉΠ½Π΅ слоТно ΠΈ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°Ρ‚ΡŒ Π΅Π΅, вСдь с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ ΠΌΡ‹ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ количСство Ρ‚Π°Π±Π»ΠΈΡ† Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ процСсс Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ являСтся строго ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Ρ‚.Π΅. Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π±Ρ‹Π»Π° Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π°.

Π’ процСссС проСктирования Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π·Π΄Ρ€Π°Π²ΠΎΠΌΡƒ смыслу ΠΈ Π½Π°ΠΉΡ‚ΠΈ баланс ΠΌΠ΅ΠΆΠ΄Ρƒ отсутствиСм Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ.

ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ нормализованная Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… – это плохая Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ….

Π₯ΠΎΡ€ΠΎΡˆΠ°Ρ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… – это Π±Π°Π·Π°, которая достаточно Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ этой Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ…:

ДСнормализация Ρ„ΠΎΡ€ΠΌ

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

Π‘Ρ…Π΅ΠΌΡ‹ "Π·Π²Π΅Π·Π΄Π°" ΠΈ "снСТинка"

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

Π’Π°ΠΆΠ½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΈ настройкС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π΄Π°Π½Π½Ρ‹Ρ… являСтся Π²Ρ‹Π±ΠΎΡ€ ΠΌΠ΅ΠΆΠ΄Ρƒ схСмой Β«Π·Π²Π΅Π·Π΄Π°Β» ΠΈ схСмой «снСТинка».

ЗвСздообразная схСма ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ структуру Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π·Π° счСт прямого ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ‚Π°Π±Π»ΠΈΡ† ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Ρ„Π°ΠΊΡ‚ΠΎΠ². Π—Π²Π΅Π·Π΄ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹ΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ поиск ΠΈ Π°Π½Π°Π»ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ… Π·Π° счСт консолидации связанных Ρ‚ΠΎΡ‡Π΅ΠΊ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π΅ΠΌ самым ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΈ ΡΡΠ½ΠΎΡΡ‚ΡŒ запросов ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, схСма «снСТинка» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, разбивая Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ. Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π±ΠΎΠ»Π΅Π΅ слоТным ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΠΌ, Π³Π΄Π΅ каТдая Π²Π΅Ρ‚Π²ΡŒ прСдставляСт ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ аспСкт Π΄Π°Π½Π½Ρ‹Ρ….

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ звСздообразная схСма (Star Schema)?

Star Schema

Π‘Ρ…Π΅ΠΌΠ° Π·Π²Π΅Π·Π΄Ρ‹ β€” это Ρ‚ΠΈΠΏ схСмы Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ† Ρ„Π°ΠΊΡ‚ΠΎΠ², ΡΡΡ‹Π»Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° нСсколько Ρ‚Π°Π±Π»ΠΈΡ† ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ. Π­Ρ‚Π° схСма вращаСтся Π²ΠΎΠΊΡ€ΡƒΠ³ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Β«Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ Ρ„Π°ΠΊΡ‚ΠΎΠ²Β». Он ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ нСсколькими Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ связанными Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ Β«Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉΒ». ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ внСшниС ΠΊΠ»ΡŽΡ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ, устанавливая связь ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π­Ρ‚ΠΎΡ‚ процСсс слуТит срСдством пСрСкрСстных ссылок, обСспСчивая ΡΠ²ΡΠ·Π½ΠΎΡΡ‚ΡŒ ΠΈ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ Π² структурС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Π’Π°Π±Π»ΠΈΡ†Π° Ρ„Π°ΠΊΡ‚ΠΎΠ² содСрТит количСствСнныС Π΄Π°Π½Π½Ρ‹Π΅, часто Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ°ΠΌΠΈ. ΠœΠ΅Ρ€Ρ‹, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, числовыС, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ, количСство ΠΈ вСс, ΠΈ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π’Π°Π±Π»ΠΈΡ†Π° Ρ„Π°ΠΊΡ‚ΠΎΠ² содСрТит ссылки Π½Π° внСшниС ΠΊΠ»ΡŽΡ‡ΠΈ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат нСчисловыС элСмСнты. Π­Ρ‚ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ свСдСния ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π΅ (Π½Π°Π·Π²Π°Π½ΠΈΠ΅, катСгория, Π±Ρ€Π΅Π½Π΄), информация ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ (имя, адрСс, сСгмСнт), ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (Π΄Π°Ρ‚Π°, мСсяц, Π³ΠΎΠ΄) ΠΈ Ρ‚. Π΄. КаТдая Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ прСдставляСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ аспСкт ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π˜Π·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ столбСц ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°, ΠΈ Π½Π° Π½Π΅Π³ΠΎ ссылаСтся Ρ‚Π°Π±Π»ΠΈΡ†Π° Ρ„Π°ΠΊΡ‚ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ внСшнСго ΠΊΠ»ΡŽΡ‡Π°.

Π’ Π·Π²Π΅Π·Π΄Π½ΠΎΠΉ схСмС:

  • Π’Π°Π±Π»ΠΈΡ†Π° Ρ„Π°ΠΊΡ‚ΠΎΠ², содСрТащая основныС ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ, располоТСна Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅.
  • КаТдая Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ связана с Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ Ρ„Π°ΠΊΡ‚ΠΎΠ², Π½ΠΎ Π½Π΅ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ, поэтому ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π²Π΅Π·Π΄Ρ‡Π°Ρ‚ΡƒΡŽ структуру. ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° схСмы Β«Π·Π²Π΅Π·Π΄Π°Β» ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ составлСниС Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² ΠΈ Π°Π½Π°Π»ΠΈΠ·, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ запросы ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ мСньшС соСдинСний ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ схСмами. УмСньшСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ простая структура ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈ ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ для хранСния Π΄Π°Π½Π½Ρ‹Ρ….

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Π΅Ρ‚ΠΊΠΎΠ΅ Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ измСрСниями ΠΈ Ρ„Π°ΠΊΡ‚Π°ΠΌΠΈ позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π»Π΅Π³ΠΊΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ измСрСниям. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π·Π²Π΅Π·Π΄ΠΎΠΎΠ±Ρ€Π°Π·Π½ΡƒΡŽ схСму Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΎΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰Π΅ΠΉ модСлью Π² прилоТСниях бизнСс-Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ.

Π₯арактСристики Π·Π²Π΅Π·Π΄ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΠΉ схСмы:

  • Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π° Ρ„Π°ΠΊΡ‚ΠΎΠ²: Π’ Ρ†Π΅Π½Ρ‚Ρ€Π΅ находится Ρ‚Π°Π±Π»ΠΈΡ†Π° основных Ρ„Π°ΠΊΡ‚ΠΎΠ², содСрТащая ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ. Он прСдставляСт Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, события ΠΈ бизнСс-ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.
  • Π’Π°Π±Π»ΠΈΡ†Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ²: Они ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Ρ„Π°ΠΊΡ‚ΠΎΠ² ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ аспСкт бизнСс-контСкста. Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹.
  • ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ-внСшний ΠΊΠ»ΡŽΡ‡: Бвязь ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ Ρ„Π°ΠΊΡ‚ΠΎΠ² ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ устанавливаСтся Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ-внСшний ΠΊΠ»ΡŽΡ‡, позволяя Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ измСрСниям.
  • Бвязь с Ρ€Π°Π·ΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ: ΠœΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… связСй. ВсС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Ρ„Π°ΠΊΡ‚ΠΎΠ².
  • ДСнормализованная структура: Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ часто Π΄Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ нСобходимости Π² соСдинСниях Π²ΠΎ врСмя запросов, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ΄Π½ΠΎ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅, Π° Π½Π΅ Ρ€Π°Π·Π±ΠΈΠ²Π°ΡŽΡ‚ ΠΈΡ… Π½Π° нСсколько Ρ‚Π°Π±Π»ΠΈΡ†.
  • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ запросов: Π’Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ прямыС связи ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ Ρ„Π°ΠΊΡ‚ΠΎΠ² ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ ΠΈ дСнормализованная структура, ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ запросов. Π­Ρ‚ΠΎ позволяСт Π·Π²Π΅Π·Π΄ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹ΠΌ схСмам Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ слоТныС аналитичСскиС Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ составлСния ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ².

Π—Π²Π΅Π·Π΄ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Π΅ схСмы идСально подходят для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΡ… ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ OLAP (ΠΎΠ½Π»Π°ΠΉΠ½-аналитичСская ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°). Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ OLAP эффСктивно ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ структуру Π·Π²Π΅Π·Π΄ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΠΉ схСмы для выполнСния свСртывания, Π΄Π΅Ρ‚Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, агрСгирования ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… аналитичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… измСрСниях.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ схСма снСТинки (Snowflake Schema)?

Snowflake Schema

A схСма снСТинки являСтся Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π·Π²Π΅Π·Π΄ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΠΉ схСмы, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Π² нСсколько связанных Ρ‚Π°Π±Π»ΠΈΡ†, Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Ρ„ΠΎΡ€ΠΌΡƒ снСТинки.

Π’ схСмС «снСТинка» Π΅ΡΡ‚ΡŒ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π° Ρ„Π°ΠΊΡ‚ΠΎΠ², содСрТащая количСствСнныС ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ. Π­Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° Ρ„Π°ΠΊΡ‚ΠΎΠ² Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ связана с Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ². Π­Ρ‚ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Π² подизмСрСния, содСрТащиС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ измСрСния. Π’ сравнСнии По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ со схСмой Β«Π·Π²Π΅Π·Π΄Π°Β», схСма «снСТинка» ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ вносит Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π² запросы ΠΈΠ·-Π·Π° нСобходимости большСго количСства соСдинСний. Π­Ρ‚Π° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ часто влияСт Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ½ΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ.

Π₯арактСристики схСмы «снСТинка»:

  • Нормализация: Π’ схСмС «снСТинка» Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎ 10000 Ρ‚ схСмы Β«Π·Π²Π΅Π·Π΄Π°Β», Π³Π΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π΄Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ Ρ€Π°Π·Π±ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° нСсколько связанных Ρ‚Π°Π±Π»ΠΈΡ†.
  • Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π΅ΡΠΊΠ°Ρ структура: Нормализация Ρ‚Π°Π±Π»ΠΈΡ† ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ создаСт ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ структуру, Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΡƒΡŽ снСТинку.
  • Бвязь ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ: Нормализация ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ связям соСдинСния ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ запросов.
  • ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: ОбъСдинСниС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† Π² схСму «снСТинка» Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большСй Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ мощности ΠΈΠ·-Π·Π° ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½ΠΎΠΉ слоТности запросов, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ влияСт Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.
  • Π¦Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…: Π‘Ρ…Π΅ΠΌΡ‹ «снСТинка» ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΡŽΡ‚ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ ΡƒΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ обновлСния. Π­Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ согласованным ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.
  • Π“ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ: Π‘Ρ…Π΅ΠΌΡ‹ «снСТинка» ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ слоТными связями Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ обСспСчиваСт Π±ΠΎΠ»Π΅Π΅ структурированный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Π°Π½Π°Π»ΠΈΠ·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ….

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ различия ΠΌΠ΅ΠΆΠ΄Ρƒ схСмой Β«Π—Π²Π΅Π·Π΄Π°Β» ΠΈ Β«Π‘Π½Π΅ΠΆΠΈΠ½ΠΊΠ°Β»

Key Differences Between Star and Snowflake Schemas
  1. АрхитСктура
    Π’Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ Π΄Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Π·Π²Π΅Π·Π΄ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΠΉ схСмС. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ прСдставлСны Π² Π²ΠΈΠ΄Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТатся всС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° этой схСмы Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Π·Π²Π΅Π·Π΄Ρƒ, дСмонстрируя Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Ρ„Π°ΠΊΡ‚ΠΎΠ² Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ ΠΈ исходящиС ΠΎΡ‚ Π½Π΅Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ.
    Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, схСма «снСТинка» ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Ρ€Π°Π·Π±ΠΈΡ‚Ρ‹ Π½Π° нСсколько связанных Ρ‚Π°Π±Π»ΠΈΡ†. Вакая нормализация создаСт ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ структуру, Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΡƒΡŽ снСТинку, с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ уровнями Ρ‚Π°Π±Π»ΠΈΡ†, ΠΎΡ‚Π²Π΅Ρ‚Π²Π»ΡΡŽΡ‰ΠΈΠΌΠΈΡΡ ΠΎΡ‚ основных Ρ‚Π°Π±Π»ΠΈΡ† ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ.

  2. Нормализация
    Π—Π²Π΅Π·Π΄ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Π΅ схСмы Π΄Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹, Π³Π΄Π΅ всС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ находятся Π² ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ измСрСния. Π­Ρ‚Π° дСнормализация сдСлана Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Однако Π΅Π³ΠΎ нСдостатком являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚. Π΅. ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большСго объСма памяти.
    Π‘Ρ…Π΅ΠΌΠ° «снСТинка» прСдставляСт собой Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ, Ρ€Π°Π·Π±ΠΈΡ‚Ρ‹ΠΌΠΈ Π½Π° нСсколько связанных Ρ‚Π°Π±Π»ΠΈΡ†. Π‘Ρ…Π΅ΠΌΠ° «снСТинка» позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ избыточности Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ качСство Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ мСньшС мСста для хранСния, Ρ‡Π΅ΠΌ схСма Β«Π·Π²Π΅Π·Π΄Π°Β».

  3. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ запросов
    Учитывая мСньшСС количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ соСдинСния ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ структуру Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² схСмС Β«Π·Π²Π΅Π·Π΄Π°Β», ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ запросов ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹ΡˆΠ΅ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ со схСмой «снСТинка».
    Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, схСма «снСТинка» содСрТит слоТныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ соСдинСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ схСма «снСТинка» ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ сниТСнию ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ запросов.

  4. ВСхничСскоС обслуТиваниС
    Π’ зависимости ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, обновлСния ΠΈ объСм памяти, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° схСм Β«Π·Π²Π΅Π·Π΄Π°Β» ΠΈ «снСТинка» ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ слоТной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ.
    Однако схСмы Β«Π·Π²Π΅Π·Π΄Π°Β» ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π»Π΅Π³Ρ‡Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ со схСмами «снСТинка» ΠΈΠ·-Π·Π° мСньшСго количСства ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ соСдинСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ запросов. Однако дСнормализованная структура способствуСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΡƒΡ€ΠΎΠ²Π½ΡŽ избыточности, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ управлСния для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ точности Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ понимания.
    ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² схСмах-снСТинках ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ затрудняСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ. БоСдинСния Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ внимания для поддСрТания ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠ³ΠΎ уровня ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ обновлСниями ΠΈ вставками Π² схСмС «снСТинка» Π±ΠΎΠ»Π΅Π΅ слоТноС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ измСнСния ΠΏΠΎ нСскольким связанным Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ со Π·Π²Π΅Π·Π΄ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΠΉ схСмой, Π³Π΄Π΅ Π΄Π°Π½Π½Ρ‹Π΅ сконцСнтрированы Π² мСньшСм количСствС Ρ‚Π°Π±Π»ΠΈΡ†. ОбновлСния ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ нСсколько Ρ‚Π°Π±Π»ΠΈΡ†, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠΈ.

Π‘Ρ…Π΅ΠΌΠ° Β«Π—Π²Π΅Π·Π΄Π°Β» Π‘Ρ…Π΅ΠΌΠ° Β«Π‘Π½Π΅ΠΆΠΈΠ½ΠΊΠ°Β»
Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² хранятся Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ². Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.
Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Ρ„Π°ΠΊΡ‚ΠΎΠ², ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ. Одна Ρ‚Π°Π±Π»ΠΈΡ†Π° Ρ„Π°ΠΊΡ‚ΠΎΠ², окруТСнная Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ, которая, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ.
Волько ΠΎΠ΄Π½ΠΎ соСдинСниС создаСт связь ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ Ρ„Π°ΠΊΡ‚ΠΎΠ² ΠΈ Π»ΡŽΠ±Ρ‹ΠΌΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ. Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ мноТСства соСдинСний для получСния Π΄Π°Π½Π½Ρ‹Ρ….
ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½ Π‘Π”. ΠžΡ‡Π΅Π½ΡŒ слоТная конструкция Π‘Π”.
ДСнормализованная структура Π΄Π°Π½Π½Ρ‹Ρ…, запросы Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ быстрСС. Нормализованная структура Π΄Π°Π½Π½Ρ‹Ρ….
Высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ избыточности Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΡ‡Π΅Π½ΡŒ Π½ΠΈΠ·ΠΊΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ избыточности Π΄Π°Π½Π½Ρ‹Ρ….
Π’Π°Π±Π»ΠΈΡ†Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ измСрСния содСрТит Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Π”Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π° Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ.
ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΡƒΠ±Π° происходит быстрСС. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΡƒΠ±Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ ΠΈΠ·-Π·Π° слоТного соСдинСния.
Π’Π°Π±Π»ΠΈΡ†Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ связаны с нСсколькими измСрСниями. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π° ​​цСнтрализованной Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ Ρ„Π°ΠΊΡ‚ΠΎΠ², которая вряд Π»ΠΈ связана с нСсколькими измСрСниями.
ΠŸΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ эффСктивныС запросы с использованиСм ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ запросов Star Join.

ΠžΡΠ½ΠΎΠ²Ρ‹ SQL

SQL

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

SQL β€” язык структурированных запросов (SQL, Structured Query Language), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС эффСктивного способа сохранСния Π΄Π°Π½Π½Ρ‹Ρ…, поиска ΠΈΡ… частСй, обновлСния, извлСчСния ΠΈ удалСния ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ рСляционным Π‘Π£Π‘Π” осущСствляСтся ΠΈΠΌΠ΅Π½Π½ΠΎ благодаря SQL. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ всС основныС манипуляции с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  • Π˜Π·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
  • Π’ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ записи Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…
  • ΠžΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ записи Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…
  • Π£Π΄Π°Π»ΡΡ‚ΡŒ записи ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
  • Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
  • Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…
  • Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…
  • Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ прСдставлСния Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…
  • Π£ΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для Ρ‚Π°Π±Π»ΠΈΡ†, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ прСдставлСний

Π”ΠΈΠ°Π»Π΅ΠΊΡ‚Ρ‹ SQL (Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ SQL)

Π―Π·Ρ‹ΠΊ SQL – ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ язык для всСх рСляционных систСм управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π‘Π£Π‘Π” вносят свои измСнСния Π² язык, примСняСмый Π² Π½ΠΈΡ…, Ρ‚Π΅ΠΌ самым отступая ΠΎΡ‚ стандарта. Π’Π°ΠΊΠΈΠ΅ языки Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈΠ»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ языка.

Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ…:

  • T-SQL – Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚ Microsoft SQL Server
  • PL/SQL – Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚ Oracle Database
  • PL/pgSQL – Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚ PostgreSQL

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ язык SQL прСдставляСт собой Π½Π°Π±ΠΎΡ€ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ дСлятся Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΈ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π΅ΡΡ‚ΡŒ своС Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ сокращСнном Π²ΠΈΠ΄Π΅ эти Π³Ρ€ΡƒΠΏΠΏΡ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ DDL, DML, DCL ΠΈ TCL.

Π“Ρ€ΡƒΠΏΠΏΡ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² языка SQL

DDL – Data Definition Language

– это Π³Ρ€ΡƒΠΏΠΏΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² опрСдСлСния Π΄Π°Π½Π½Ρ‹Ρ…. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², входящих Π² эту Π³Ρ€ΡƒΠΏΠΏΡ‹, ΠΌΡ‹ опрСдСляСм структуру Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ этой Π±Π°Π·Ρ‹, Ρ‚.Π΅. создаСм, измСняСм ΠΈ удаляСм ΠΈΡ….

Π’ эту Π³Ρ€ΡƒΠΏΠΏΡƒ входят ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹:

  • CREATE – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…;
  • ALTER – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для измСнСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…;
  • DROP – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для удалСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

DML – Data Manipulation Language

– это Π³Ρ€ΡƒΠΏΠΏΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² для манипуляции Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этих ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ, ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ, ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π±Π°Π·Ρ‹, Ρ‚.Π΅. ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠΈ.

Π’ эту Π³Ρ€ΡƒΠΏΠΏΡƒ входят самыС распространённыС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ языка SQL:

  • SELECT – осущСствляСт Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ…;
  • INSERT – добавляСт Π½ΠΎΠ²Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅;
  • UPDATE – измСняСт ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅;
  • DELETE – удаляСт Π΄Π°Π½Π½Ρ‹Π΅.

DCL – Data Control Language

– Π³Ρ€ΡƒΠΏΠΏΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² опрСдСлСния доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ. Π˜Π½Ρ‹ΠΌΠΈ словами, это ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ для управлСния Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌΠΈ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½ΠΈΡ… ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Бюда входят:

  • GRANT – прСдоставляСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΈΠ»ΠΈ Π³Ρ€ΡƒΠΏΠΏΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ;
  • REVOKE – ΠΎΡ‚Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹Π΄Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ;
  • DENY – Π·Π°Π΄Π°Ρ‘Ρ‚ Π·Π°ΠΏΡ€Π΅Ρ‚, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π½Π°Π΄ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ.

TCL – Transaction Control Language

– Π³Ρ€ΡƒΠΏΠΏΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² для управлСния транзакциями. Вранзакция – это ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊ ΠΊΠΎΠΌΠ°Π½Π΄ (инструкций), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅, ΠΏΡ€ΠΈ этом Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… всС внСсСнныС измСнСния Ρ„ΠΈΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° постоянной основС ΠΈΠ»ΠΈ ΠΎΡ‚ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, Ρ‚.Π΅. всС измСнСния, внСсСнныС любой ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, входящСй Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Ρ‹.

Бюда ΠΌΠΎΠΆΠ½ΠΎ отнСсти:

  • BEGIN TRANSACTION – слуТит для опрСдСлСния Π½Π°Ρ‡Π°Π»Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ;
  • COMMIT TRANSACTION – примСняСт Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ;
  • ROLLBACK TRANSACTION – ΠΎΡ‚ΠΊΠ°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ всС измСнСния, сдСланныС Π² контСкстС Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ;
  • SAVE TRANSACTION – устанавливаСт ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ сохранСния Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ MS SQL ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь: Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ языку SQL (DDL, DML) Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π° MS SQL Server. Π§Π°ΡΡ‚ΡŒ пСрвая, Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ языку SQL (DDL, DML) Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π° MS SQL Server. Π§Π°ΡΡ‚ΡŒ вторая

ΠžΠ±Ρ‰Π°Ρ структура запроса выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

SELECT (столбцы ΠΈΠ»ΠΈ * для Π²Ρ‹Π±ΠΎΡ€Π° всСх столбцов; ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ)

FROM (Ρ‚Π°Π±Π»ΠΈΡ†Π°; ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ)

WHERE (условиС/Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, city = Moscow; Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ)

GROUP BY (столбСц, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠ³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅; Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ)

HAVING (условиС/Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ сгруппированных Π΄Π°Π½Π½Ρ‹Ρ…; Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ)

ORDER BY (столбСц, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄; Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ)

SELECT

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

SELECT, FROM β€” ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ элСмСнты запроса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ столбцы, ΠΈΡ… порядок ΠΈ источник Π΄Π°Π½Π½Ρ‹Ρ….

Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ всС (обозначаСтся ΠΊΠ°ΠΊ *) ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Customers:

SELECT * FROM Customers;

Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ столбцы CustomerID, CustomerName ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Customers:

SELECT CustomerID, CustomerName FROM Customers

АгрСгатныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

GROUP BY

GROUP BY β€” Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт запроса, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΡŽ ΠΏΠΎ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ столбцу (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΆΠΈΠ²Π΅Ρ‚ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· Π³ΠΎΡ€ΠΎΠ΄ΠΎΠ²).

ΠŸΡ€ΠΈ использовании GROUP BY ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ:

  • ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ столбцов, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ дСлаСтся Ρ€Π°Π·Ρ€Π΅Π·, Π±Ρ‹Π» ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ SELECT ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ GROUP BY,
  • Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (SUM, AVG, COUNT, MAX, MIN) Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ SELECT с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ столбца, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ такая функция примСняСтся.

ОписаниС Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Ѐункция ОписаниС
SUM(ΠΏΠΎΠ»Π΅_Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹) Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ сумму Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ
AVG(ΠΏΠΎΠ»Π΅_Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹) Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
COUNT(ΠΏΠΎΠ»Π΅_Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹) Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство записСй
MIN(ΠΏΠΎΠ»Π΅_Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹) Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ минимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
MAX(ΠΏΠΎΠ»Π΅_Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹) Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

АгрСгатныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ для Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π½Π΅ Ρ€Π°Π²Π½Ρ‹Ρ… NULL. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ являСтся функция COUNT(*)

Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° количСства ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎ Π³ΠΎΡ€ΠΎΠ΄Ρƒ:

SELECT City, count(CustomerID) FROM Customers
GROUP BY City

Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° количСства ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎ странС ΠΈ Π³ΠΎΡ€ΠΎΠ΄Ρƒ:

SELECT Country, City, count(CustomerID) FROM Customers
GROUP BY Country, City

Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΡ€ΠΎΠ΄Π°ΠΆ ΠΏΠΎ ID Ρ‚ΠΎΠ²Π°Ρ€Π° с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹ΠΌΠΈ функциями: количСство Π·Π°ΠΊΠ°Π·ΠΎΠ² с Π΄Π°Π½Π½Ρ‹ΠΌ Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠΌ ΠΈ количСство ΠΏΡ€ΠΎΠ΄Π°Π½Π½Ρ‹Ρ… ΡˆΡ‚ΡƒΠΊ Ρ‚ΠΎΠ²Π°Ρ€Π°:

SELECT ProductID, COUNT(OrderID), SUM(Quantity) FROM OrderDetails
GROUP BY ProductID

Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΡ€ΠΎΠ΄Π°ΠΆ с Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠ΅ΠΉ исходной Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†Π° с количСством ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎ Π³ΠΎΡ€ΠΎΠ΄Π°ΠΌ Π“Π΅Ρ€ΠΌΠ°Π½ΠΈΠΈ:

SELECT City, count(CustomerID) FROM Customers
WHERE Country = 'Germany'
GROUP BY City

ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ столбца с Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠ΅ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° AS. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ столбца с Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠ΅ΠΉ Ρ€Π°Π²Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π½ΠΎΠΉ Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Π΄Π°Π»Π΅Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ для восприятия.

SELECT City, count(CustomerID) AS Number_of_clients FROM Customers
GROUP BY City

WHERE ΠΈ HAVING

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

WHERE

WHERE β€” Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт запроса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ. ΠžΡ‡Π΅Π½ΡŒ часто Π²Π½ΡƒΡ‚Ρ€ΠΈ элСмСнта WHERE ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ IN / NOT IN для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ столбца ΠΏΠΎ нСскольким значСниям, AND / OR для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΏΠΎ нСскольким столбцам.

Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ ΠΈ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ:

SELECT * FROM Customers
WHERE City = 'London'

Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ ΠΈ нСскольким значСниям с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ IN (Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅) ΠΈΠ»ΠΈ NOT IN (ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅):

SELECT * FROM Customers
WHERE City IN ('London', 'Berlin')
SELECT * FROM Customers
WHERE City NOT IN ('Madrid', 'Berlin','Bern')

Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΏΠΎ нСскольким условиям с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ AND (Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ всС условия) ΠΈΠ»ΠΈ OR (выполняСтся хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎ условиС) ΠΈ нСскольким значСниям:

SELECT * FROM Customers
WHERE Country = 'Germany' AND City NOT IN ('Berlin', 'Aachen') AND CustomerID > 15
SELECT * FROM Customers
WHERE City IN ('London', 'Berlin') OR CustomerID > 4

HAVING

HAVING β€” Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт запроса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡŽ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ сгруппированных Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΠΎ сути, WHERE, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² - Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ‹ΡˆΠ΅).

Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с количСством ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎ Π³ΠΎΡ€ΠΎΠ΄Π°ΠΌ, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС оставляСм Π² Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ Π³ΠΎΡ€ΠΎΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 5 ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²:

SELECT City, count(CustomerID) FROM Customers
GROUP BY City
HAVING count(CustomerID) >= 5

Π’ случаС с ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ столбцом Π²Π½ΡƒΡ‚Ρ€ΠΈ HAVING ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΈ саму Π°Π³Ρ€Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ count(CustomerID), Ρ‚Π°ΠΊ ΠΈ Π½ΠΎΠ²ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ столбца number_of_clients:

SELECT City, count(CustomerID) AS number_of_clients FROM Customers
GROUP BY City
HAVING number_of_clients >= 5

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ запроса, содСрТащСго WHERE ΠΈ HAVING. Π’ Π΄Π°Π½Π½ΠΎΠΌ запросС сначала Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅Ρ‚ΡΡ исходная Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΏΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, рассчитываСтся количСство ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎ Π³ΠΎΡ€ΠΎΠ΄Π°ΠΌ ΠΈ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ Π³ΠΎΡ€ΠΎΠ΄Π°, Π³Π΄Π΅ количСство ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 5:

SELECT City, count(CustomerID) AS number_of_clients FROM Customers
WHERE CustomerName NOT IN ('Around the Horn','Drachenblut Delikatessend')
GROUP BY City
HAVING number_of_clients >= 5

ORDER BY

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

ORDER BY

ORDER BY β€” Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт запроса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° сортировку Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сортировки ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ столбцу. Π’ Π΄Π°Π½Π½ΠΎΠΌ запросС осущСствляСтся сортировка ΠΏΠΎ Π³ΠΎΡ€ΠΎΠ΄Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Π» ΠΊΠ»ΠΈΠ΅Π½Ρ‚:

SELECT * FROM Customers
ORDER BY City

ΠžΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ сортировку ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΠΏΠΎ нСскольким столбцам, Π² этом случаС сортировка происходит ΠΏΠΎ порядку ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… столбцов:

SELECT * FROM Customers
ORDER BY Country, City

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ сортировка происходит ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ для чисСл ΠΈ Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС для тСкстовых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Если Π½ΡƒΠΆΠ½Π° обратная сортировка, Ρ‚ΠΎ Π² конструкции ORDER BY послС названия столбца Π½Π°Π΄ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ DESC:

SELECT * FROM Customers
ORDER BY CustomerID DESC

ΠžΠ±Ρ€Π°Ρ‚Π½Π°Ρ сортировка ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ столбцу ΠΈ сортировка ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ:

SELECT * FROM Customers
ORDER BY Country DESC, City

CASE

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

CASE Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² SQL ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для выполнСния условной Π»ΠΎΠ³ΠΈΠΊΠΈ Π² запросах. Оно позволяСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ условия ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ условиС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ встрСчаСтся ΠΏΡ€Π°Π²Π΄ΠΈΠ²ΠΎΠ΅ условиС, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ останавливаСтся, ΠΈ возвращаСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

БущСствуСт Π΄Π²Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ выраТСния CASE: простоС (simple) CASE ΠΈ поиск с условиями (searched) CASE.

  1. ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ CASE Π’ этой Ρ„ΠΎΡ€ΠΌΠ΅ SQL сравниваСт Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ совпадСния.

Бинтаксис:

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE default_result
END

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

SELECT
    product_name,
    CASE category_id
        WHEN 1 THEN 'Electronics'
        WHEN 2 THEN 'Books'
        ELSE 'Other'
    END AS category
FROM products;

Π—Π΄Π΅ΡΡŒ, Π² зависимости ΠΎΡ‚ category_id, ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρƒ присваиваСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ катСгория. Если Π½Π΅Ρ‚ совпадСний, выполняСтся условиС ELSE, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅Π΅ 'Other'.

  1. Поиск с условиями CASE Π­Ρ‚Π° Ρ„ΠΎΡ€ΠΌΠ° позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ логичСскиС условия (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, >, <, =, !=), Π° Π½Π΅ просто ΡΠΎΠΏΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌΠΈ значСниями.

Бинтаксис:

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE default_result
END

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

SELECT
    employee_name,
    salary,
    CASE
        WHEN salary > 80000 THEN 'High'
        WHEN salary BETWEEN 50000 AND 80000 THEN 'Medium'
        ELSE 'Low'
    END AS salary_range
FROM employees;

Π­Ρ‚ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ CASE провСряСт Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ условия для Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρ‹ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρ‹.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹:

  • Условия Π² Π±Π»ΠΎΠΊΠ°Ρ… WHEN ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ ΠΏΠΎ порядку, ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ TRUE, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ.
  • Π‘Π»ΠΎΠΊ ELSE нСобязатСлСн ΠΈ Π·Π°Π΄Π°Ρ‘Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ссли Π½ΠΈ ΠΎΠ΄Π½ΠΎ условиС Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ.
  • CASE часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ SELECT, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² UPDATE, DELETE ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… частях запроса.

ОбъСдинСния Ρ‚Π°Π±Π»ΠΈΡ†

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

ОбъСдинСния Ρ‚Π°Π±Π»ΠΈΡ† основаны Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… ΠΈ Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· основ Ρ€Π°Π±ΠΎΡ‚Ρ‹ рСляционных Π‘Π£Π‘Π”.

INNER JOIN

CΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находятся ΠΏΠ°Ρ€Ρ‹ записСй ΠΈΠ· Π΄Π²ΡƒΡ… Ρ‚Π°Π±Π»ΠΈΡ†, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ соСдинСния, Ρ‚Π΅ΠΌ самым образуя Π½ΠΎΠ²ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ поля ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ исходных Ρ‚Π°Π±Π»ΠΈΡ†.

LEFT JOIN

Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС значСния ΠΈΠ· Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, соСдинённыС с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ значСниями ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Ссли ΠΎΠ½ΠΈ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‚ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ соСдинСния, ΠΈΠ»ΠΈ замСняСт ΠΈΡ… Π½Π° NULL Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ случаС.

RIGHT JOIN

Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС значСния ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, соСдинённыС с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ значСниями ΠΈΠ· Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Ссли ΠΎΠ½ΠΈ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‚ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ соСдинСния, ΠΈΠ»ΠΈ замСняСт ΠΈΡ… Π½Π° NULL Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ случаС.

FULL JOIN

Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ выполняСт Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ соСдинСниС записСй ΠΈ дополняСт ΠΈΡ… Π»Π΅Π²Ρ‹ΠΌ внСшним соСдинСниСм ΠΈ ΠΏΡ€Π°Π²Ρ‹ΠΌ внСшним соСдинСниСм.

Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ соСдинСния:

  • ЀормируСтся Ρ‚Π°Π±Π»ΠΈΡ†Π° Π½Π° основС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ соСдинСния (INNER JOIN)
  • Π’ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ значСния Π½Π΅ вошСдшиС Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ формирования ΠΈΠ· Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (LEFT OUTER JOIN)
  • Π’ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ значСния Π½Π΅ вошСдшиС Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ формирования ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (RIGHT OUTER JOIN)

Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ запросы для Ρ€Π°Π·Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² объСдинСния Ρ‚Π°Π±Π»ΠΈΡ†

Joins Joins Joins

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ запросы

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ запрос – это запрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ находится Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ SQL запроса ΠΈ встроСн Π²Π½ΡƒΡ‚Ρ€ΠΈ условного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° WHERE.

Π”Π°Π½Π½Ρ‹ΠΉ Π²ΠΈΠ΄ запросов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для возвращСния Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² основном запросС, ΠΊΠ°ΠΊ условиС для ограничСния ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΡ€Π°Π²ΠΈΠ»Π° Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… запросов

На Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ запрос Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ограничСния:

  • Бписок Π²Ρ‹Π±ΠΎΡ€Π° Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ запроса, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉΡΡ с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° сравнСния, ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ имя столбца (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² EXISTS ΠΈ IN Π² инструкции SELECT * ΠΈΠ»ΠΈ Π² спискС соотвСтствСнно).
  • Если ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ WHERE внСшнСго запроса Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ имя столбца, ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ совмСстимо для соСдинСния со столбцом Π² спискС Π²Ρ‹Π±ΠΎΡ€Π° Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ запроса.
  • Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ntext, тСкста ΠΈ изобраТСния нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² спискС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… запросов.
  • Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ запросы, прСдставлСнныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π½Π΅ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ сравнСния (ΠΎΠ΄ΠΈΠ½ Π½Π΅ слСдуСт ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΌΡƒ слову ANY ΠΈΠ»ΠΈ ALL) Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ GROUP BY ΠΈ HAVING прСдлоТСния.
  • ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ DISTINCT слово нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ запросами, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΌΠΈ GROUP BY.
  • НС COMPUTE удаСтся ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ прСдлоТСния ΠΈ INTO прСдлоТСния.
  • ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ORDER BY ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ вмСстС с ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ TOP.
  • ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅, созданноС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… запросов, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΎ.
  • Бписок Π²Ρ‹Π±ΠΎΡ€Π° Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ запроса, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ с прСдлоТСния EXISTS, ΠΏΠΎ соглашСнию содСрТит Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΡƒ * вмСсто ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ столбца. ΠŸΡ€Π°Π²ΠΈΠ»Π° для Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ запроса, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ с прСдлоТСния EXISTS, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΆΠ΅, ΠΊΠ°ΠΊ для стандартного списка Π²Ρ‹Π±ΠΎΡ€Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ запрос, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉΡΡ с прСдлоТСния EXISTS, ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π½Π° сущСствованиС ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ TRUE ΠΈΠ»ΠΈ FALSE вмСсто Π΄Π°Π½Π½Ρ‹Ρ….

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь: Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ запросы (SQL Server)

Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ возмоТности SQL

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

ΠŸΡ€ΠΈ составлСнии SQL запросов ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ строк, чисСл, Π΄Π°Ρ‚, Π° Ρ‚Π°ΠΊΠΆΠ΅ выполнСния Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠ°ΠΊ Π² ΠΎΠ΄Π½ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ, Ρ‚Π°ΠΊ ΠΈ Π½Π° Π½Π°Π±ΠΎΡ€Π΅ строк.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² SQL ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° нСсколько ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ:

АгрСгатныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с мноТСством строк ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΎΠ΄Π½ΠΎ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π˜Ρ… часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ вмСстС с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ GROUP BY.

  • COUNT(): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство строк.

    SELECT COUNT(*) FROM users;
  • SUM(): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ сумму Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

    SELECT SUM(salary) FROM employees;
  • AVG(): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

    SELECT AVG(age) FROM users;
  • MIN(): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ минимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

    SELECT MIN(salary) FROM employees;
  • MAX(): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

    SELECT MAX(salary) FROM employees;

Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с тСкстовыми Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, позволяя ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ строки, Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ подстроки ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с тСкстом.

  • LENGTH(): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ строки.

    SELECT LENGTH('Hello World');
  • LOWER() / UPPER(): ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ строку ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ ΠΈΠ»ΠΈ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌΡƒ рСгистру.

    SELECT LOWER('HELLO'), UPPER('hello');
  • SUBSTRING(): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ подстроку.

    SELECT SUBSTRING('Hello World', 1, 5);  -- Π’Π΅Ρ€Π½Π΅Ρ‚ 'Hello'
  • CONCAT(): ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ строки.

    SELECT CONCAT(first_name, ' ', last_name) FROM users;
  • TRIM(): УдаляСт ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈ ΠΊΠΎΠ½Ρ†Π΅ строки.

    SELECT TRIM('   Hello World   ');

ЧисловыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π Π°Π±ΠΎΡ‚Π 10000 °ΡŽΡ‚ с числовыми Π΄Π°Π½Π½Ρ‹ΠΌΠΈ для выполнСния матСматичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

  • ROUND(): ΠžΠΊΡ€ΡƒΠ³Π»ΡΠ΅Ρ‚ число Π΄ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ количСства Π·Π½Π°ΠΊΠΎΠ² послС запятой.

    SELECT ROUND(123.456, 2);  -- Π’Π΅Ρ€Π½Π΅Ρ‚ 123.46
  • CEIL() / FLOOR(): ΠžΠΊΡ€ΡƒΠ³Π»ΡΡŽΡ‚ число Π²Π²Π΅Ρ€Ρ… ΠΈΠ»ΠΈ Π²Π½ΠΈΠ· Π΄ΠΎ блиТайшСго Ρ†Π΅Π»ΠΎΠ³ΠΎ.

    SELECT CEIL(1.2), FLOOR(1.8);  -- Π’Π΅Ρ€Π½Π΅Ρ‚ 2 ΠΈ 1 соотвСтствСнно
  • ABS(): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ числа.

    SELECT ABS(-10);  -- Π’Π΅Ρ€Π½Π΅Ρ‚ 10
  • MOD(): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ остаток ΠΎΡ‚ дСлСния.

    SELECT MOD(10, 3);  -- Π’Π΅Ρ€Π½Π΅Ρ‚ 1

Π”Π°Ρ‚Π° ΠΈ врСмя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Π΄Π°Ρ‚Π°ΠΌΠΈ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ, позволяя ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ части Π΄Π°Ρ‚Ρ‹, Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π½ΠΈ, мСсяцы ΠΈ Ρ‚.Π΄.

  • NOW(): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π΄Π°Ρ‚Ρƒ ΠΈ врСмя.

    SELECT NOW();
  • CURDATE(): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π΄Π°Ρ‚Ρƒ.

    SELECT CURDATE();
  • DATE_ADD(): ДобавляСт ΠΊ Π΄Π°Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π».

    SELECT DATE_ADD('2024-01-01', INTERVAL 7 DAY);  -- Π’Π΅Ρ€Π½Π΅Ρ‚ '2024-01-08'
  • DATEDIFF(): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Π΄Π°Ρ‚Π°ΠΌΠΈ Π² днях.

    SELECT DATEDIFF('2024-12-31', '2024-01-01');  -- Π’Π΅Ρ€Π½Π΅Ρ‚ 364
  • YEAR(), MONTH(), DAY(): Π˜Π·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π΄Π°Ρ‚Ρ‹.

    SELECT YEAR(NOW()), MONTH(NOW()), DAY(NOW());

ЛогичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ значСниями ΠΈ выраТСниями.

  • IF(): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли условиС истинно, ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ β€” Ссли Π»ΠΎΠΆΠ½ΠΎ.

    SELECT IF(salary > 5000, 'High', 'Low') FROM employees;
  • COALESCE(): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ (Π½Π΅ NULL) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

    SELECT COALESCE(NULL, NULL, 'Value');  -- Π’Π΅Ρ€Π½Π΅Ρ‚ 'Value'
  • NULLIF(): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ NULL, Ссли Π΄Π²Π° выраТСния Ρ€Π°Π²Π½Ρ‹, ΠΈΠ½Π°Ρ‡Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

    SELECT NULLIF(10, 10);  -- Π’Π΅Ρ€Π½Π΅Ρ‚ NULL

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

SELECT CONCAT(first_name, ' ', last_name) AS full_name,
       YEAR(NOW()) - YEAR(birthdate) AS age,
       IF(salary > 5000, 'High Salary', 'Low Salary') AS salary_status
FROM employees;

Π­Ρ‚ΠΎΡ‚ запрос Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΠ΅ имя сотрудника, возраст ΠΈ статус Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρ‹ Π½Π° основС условия.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² SQL ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ эффСктивно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ запросов ΠΈ прСдоставляя Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ способы манипуляции числами, строками ΠΈ Π΄Π°Ρ‚Π°ΠΌΠΈ.

Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ ΠΏΠΎ функциям SQL

АналитичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

АналитичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² SQL (Ρ‚Π°ΠΊΠΆΠ΅ извСстныС ΠΊΠ°ΠΊ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ вычислСния ΠΏΠΎ Π½Π°Π±ΠΎΡ€Ρƒ строк, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹ΠΌ функциям, Π½ΠΎ с Ρ‚Π΅ΠΌ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΡŽΡ‚ строки Π² ΠΎΠ΄Π½Ρƒ запись, Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки. Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, сохраняя доступ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС исходного Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ….

Бинтаксис аналитичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ аналитичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΈΡˆΡƒΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

<функция>([Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹]) OVER ([PARTITION BY] [ORDER BY])
  • Ѐункция β€” это аналитичСская функция, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ROW_NUMBER(), RANK(), SUM(), AVG() ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.
  • OVER β€” ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° использованиС ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
  • PARTITION BY β€” позволяСт Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Π³Ρ€ΡƒΠΏΠΏΡ‹, Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ расчСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ GROUP BY).
  • ORDER BY β€” опрСдСляСт порядок, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ строки Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ упорядочСны для расчСтов.

Часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ аналитичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

  • ROW_NUMBER(): Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ строки Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ порядкС.

    SELECT ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num, employee_name, salary
    FROM employees;
  • RANK(): присваиваСт ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС Π½Π° основС ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ порядка, ΠΏΡ€ΠΈ этом строки с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ значСниями ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π½Π³.

    SELECT RANK() OVER (ORDER BY salary DESC) AS rank, employee_name, salary
    FROM employees;
  • DENSE_RANK(): отличаСтся ΠΎΡ‚ RANK(), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… значСниях строки пропуски ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π½Π³Π°ΠΌΠΈ Π½Π΅ ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ.

    SELECT DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank, employee_name, salary
    FROM employees;
  • NTILE(n): Π΄Π΅Π»ΠΈΡ‚ строки Π½Π° n Ρ€Π°Π²Π½Ρ‹Ρ… частСй (кусков).

    SELECT NTILE(4) OVER (ORDER BY salary DESC) AS quartile, employee_name, salary
    FROM employees;
  • SUM(), AVG(), MIN(), MAX(): ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для расчСта кумулятивной суммы.

    SELECT employee_name, salary,
           SUM(salary) OVER (ORDER BY salary DESC) AS running_total
    FROM employees;
  • FIRST_VALUE(): Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΎΠΊΠ½Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ OVER().

    SELECT name, salary, FIRST_VALUE(salary) OVER (ORDER BY salary DESC) AS first_salary
    FROM employees;

Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки этот запрос Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ самоС высокоС (ΠΏΠ΅Ρ€Π²ΠΎΠ΅) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρ‹ Π² ΠΎΠΊΠ½Π΅.

  • LAST_VALUE(): Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ послСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΎΠΊΠ½Π΅.

    SELECT name, salary, LAST_VALUE(salary) OVER (ORDER BY salary DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS last_salary
    FROM employees;

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ LAST_VALUE() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ послСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρ‹ Π² ΠΎΠΊΠ½Π΅. Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΎΠΊΠ½Π°.

  • LAG(): позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ строки ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ.

    SELECT name, salary, LAG(salary, 1) OVER (ORDER BY salary DESC) AS prev_salary
    FROM employees;

Π­Ρ‚ΠΎΡ‚ запрос Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ строки ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ строки. Если это пСрвая строка, вСрнСтся NULL.

  • LEAD(): позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строки ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ.

    SELECT name, salary, LEAD(salary, 1) OVER (ORDER BY salary DESC) AS next_salary
    FROM employees;

Π­Ρ‚ΠΎΡ‚ запрос Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строки ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ строки. Если это послСдняя строка, вСрнСтся NULL.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования аналитичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

НуТно вывСсти список сотрудников с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΈΡ… Ρ€Π°Π½Π³Π°, Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρ‹, Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρ‹ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ сотрудника ΠΈ самого высокого значСния Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρ‹.

SELECT name,
       salary,
       RANK() OVER (ORDER BY salary DESC) AS rank,
       LAG(salary) OVER (ORDER BY salary DESC) AS prev_salary,
       FIRST_VALUE(salary) OVER (ORDER BY salary DESC) AS highest_salary
FROM employees;

Π­Ρ‚ΠΎΡ‚ запрос для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сотрудника Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π³ΠΎ имя, Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ, Ρ€Π°Π½Π³, Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ сотрудника ΠΈ ΡΠ°ΠΌΡƒΡŽ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ Π² Π½Π°Π±ΠΎΡ€Π΅.

PARTITION BY

PARTITION BY раздСляСт Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Π³Ρ€ΡƒΠΏΠΏΡ‹, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ вычислСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° GROUP BY, Π½ΠΎ Π±Π΅Π· Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΠ΄Π½Ρƒ строку.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: подсчСт Ρ€Π°Π½Π³Π° Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅ Π΄Π΅ΠΏΠ°Ρ€Ρ‚Π°ΠΌΠ΅Π½Ρ‚ΠΎΠ².

SELECT department, employee_name, salary,
       RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS rank_in_dept
FROM employees;

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅

  • ΠšΡƒΠΌΡƒΠ»ΡΡ‚ΠΈΠ²Π½Ρ‹Π΅ суммы ΠΈ ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰ΠΈΠ΅ срСдниС: АналитичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для расчСта кумулятивных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ для Π°Π½Π°Π»ΠΈΠ·Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… рядов, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для нахоТдСния ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π³ΠΎ срСднСго.

  • Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ строк: Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ строку с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΈΠ»ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠ°ΠΊ LAG() ΠΈ LEAD().

    SELECT employee_name, salary,
           LAG(salary) OVER (ORDER BY salary) AS prev_salary,
           LEAD(salary) OVER (ORDER BY salary) AS next_salary
    FROM employees;

ΠžΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ€Π°ΠΌΠΊΠΈ (Window Frames)

МоТно Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π°ΠΌΠΊΠΈ для ΠΎΠΊΠ½Π°, опрСдСляя Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ строк для Π°Π½Π°Π»ΠΈΠ·Π°:

  • ROWS BETWEEN: опрСдСляСт Ρ€Π°ΠΌΠΊΡƒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ строки.

    SUM(salary) OVER (ORDER BY salary ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)

Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для расчСта Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π° основС сосСдних строк.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, аналитичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² SQL β€” это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт для выполнСния слоТных аналитичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π±Π΅Π· нСобходимости Π² подзапросах ΠΈ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ°Ρ…, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ процСсс Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² рСляционных Π±Π°Π·Π°Ρ….

Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ ΠΏΠΎ функциям SQL

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь: ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ OLAP-запросов с использованиСм аналитичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Учимся ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

EXPLAIN

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

EXPLAIN β€” это ΠΊΠΎΠΌΠ°Π½Π΄Π° Π² SQL, которая ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ запрос. Она ΠΏΠΎΠ»Π΅Π·Π½Π° для Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ запросов ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ зависимости ΠΎΡ‚ систСмы управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (Π‘Π£Π‘Π”), Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°Ρ€ΡŒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Π½ΠΎ общая Ρ†Π΅Π»ΡŒ β€” Π΄Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ запрос Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½, ΠΊΠ°ΠΊΠΈΠ΅ индСксы Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ шаги Π±ΡƒΠ΄ΡƒΡ‚ прСдприняты для получСния Π΄Π°Π½Π½Ρ‹Ρ….

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ аспСкты ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ EXPLAIN:

  1. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ выполнСния запроса: ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Π² ΠΊΠ°ΠΊΠΎΠΌ порядкС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² запросС, ΠΊΠ°ΠΊ Π‘Π£Π‘Π” ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ (Ссли Π΅ΡΡ‚ΡŒ JOIN).

  2. ИспользованиС индСксов: Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Ρ‚ΠΎΠΌ, Π±ΡƒΠ΄ΡƒΡ‚ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ индСксы, ΠΈ Ссли Π΄Π°, Ρ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅.

  3. Π’ΠΈΠΏΡ‹ соСдинСний (JOIN): Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΈΠΏΡ‹ соСдинСний, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ:

    • ALL β€” ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (table scan), это ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΠΈ ΠΌΠ΅Π½Π΅Π΅ эффСктивно.
    • INDEX β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ индСкс, Ρ‡Ρ‚ΠΎ быстрСС, Ρ‡Π΅ΠΌ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€.
    • RANGE β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ индСкса.
    • REF β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ индСкс ΠΏΠΎ Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ.
    • EQ_REF β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ индСкс.
  4. ΠžΡ†Π΅Π½ΠΊΠ° количСства строк: ОТидаСмоС количСство строк, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ этапС запроса. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ, сколько Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ.

  5. ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ сортировки: ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈ потрСбуСтся Π»ΠΈ для этого Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ опСрация сортировки.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ (для MySQL):

EXPLAIN SELECT * FROM users WHERE age > 25;

Π­Ρ‚ΠΎΡ‚ запрос ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ ΠΏΠ»Π°Π½ выполнСния запроса ΠΏΠΎ Π²Ρ‹Π±ΠΎΡ€Ρƒ всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΡΡ‚Π°Ρ€ΡˆΠ΅ 25 Π»Π΅Ρ‚.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄Π° (MySQL):

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE users ALL NULL NULL NULL NULL 1000 Using where
  • id: ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ запроса ΠΈΠ»ΠΈ подзапроса.
  • select_type: Ρ‚ΠΈΠΏ запроса (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, простой ΠΈΠ»ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ).
  • table: Ρ‚Π°Π±Π»ΠΈΡ†Π°, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ шагС.
  • type: Ρ‚ΠΈΠΏ соСдинСния (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ β€” ALL).
  • possible_keys: Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ индСксы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.
  • key: индСкс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» фактичСски использован (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС индСкс Π½Π΅ использовался).
  • rows: ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎΠ΅ количСство строк, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ.
  • Extra: Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Using where, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ условиС.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ запросов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ EXPLAIN

  1. ИспользованиС индСксов: Если ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΈΠΏ соСдинСния ALL, это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ индСкс Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ оптимизация индСксов ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ запрос.

  2. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ сканирования Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹: ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (table scan) ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΡ€ΠΎΠ³ΠΈΠΌ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. EXPLAIN ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ случаи ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запросы.

  3. JOIN: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, ΠΊΠ°ΠΊ Π‘Π£Π‘Π” соСдиняСт Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ запросы, добавляя индСксы Π½Π° ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ поля для ускорСния соСдинСний.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, EXPLAIN являСтся ΠΌΠΎΡ‰Π½Ρ‹ΠΌ инструмСнтом для Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ запросов Π² SQL.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ

  • EXPLAIN ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ запросам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΈΠ»ΠΈ измСняСмыС запросы Π½Π° основС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ EXPLAIN. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ EXPLAIN ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅. ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ EXPLAIN с Π½Π΅ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ запроса возвращаСтся ошибка ΠΈΠ»ΠΈ сам запрос.
  • EXPLAIN Π½Π΅ поддСрТиваСтся Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь: Π§ΠΈΡ‚Π°Π΅ΠΌ EXPLAIN Π½Π° максималках, ИспользованиС EXPLAIN. Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ запросов

Π˜Π½Π΄Π΅ΠΊΡΡ‹

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

ИндСкс (Index) – это особая Ρ‚Π°Π±Π»ΠΈΡ†Π° (Π½Π° самом Π΄Π΅Π»Π΅ совсСм Π½Π΅Ρ‚, это скорСС мСтаинформация, Π½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ условно ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ поисковыми систСмами для поиска Π΄Π°Π½Π½Ρ‹Ρ…. Π•Π³ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ использованиС ΠΈΠ³Ρ€Π°Π΅Ρ‚ Π²Π°ΠΆΠ½Π΅ΠΉΡˆΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ sql сСрвСров.

Благодаря индСксу процСсс поиска Π΄Π°Π½Π½Ρ‹Ρ… сокращаСтся Π·Π° счСт ΠΈΡ… упорядочивания ΠΊΠ°ΠΊ физичСского, Ρ‚Π°ΠΊ ΠΈ логичСского. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ½ выглядит ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ ссылок Π½Π° Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ упорядочСны ΠΏΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌΡƒ столбцу Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π’Π°ΠΊΠΎΠΉ столбСц называСтся индСксированным. Π˜Π½Π΄Π΅ΠΊΡΡ‹ находятся Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈ ΠΏΠΎ сути Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ систСмы sql-сСрвСра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ.

Π’ Ρ†Π΅Π»ΠΎΠΌ, создавая индСкс Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΌΡ‹ тСряСм мСсто, Π½ΠΎ ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°Π΅ΠΌ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ поиска. Π›ΡŽΠ±ΠΎΠΉ индСкс Π°ΠΊΡ‚ΡƒΠ°Π»Π΅Π½ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° измСнСния количСства записСй Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, послС этого ΠΌΡ‹ ΠΎΠΏΡΡ‚ΡŒ тСряСм, Π½ΠΎ ΡƒΠΆΠ΅ рСсурсы Π½Π° пСрСстроСниС индСкса. Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ Π²Ρ‹Π±ΠΎΡ€Π° Ρ‚ΠΈΠΏΠ° индСкса ΠΈ ΠΏΠΎΠ»Π΅ΠΉ зависит Π΅Π³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡ‚ΡŒ - индСкс Π½Π° ΠΏΠΎΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² запросы, Π±ΡƒΠ΄Π΅Ρ‚ бСсполСзСн.

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π° создана ΠΈ Π² Π½Π΅ΠΉ Π΅Ρ‰Π΅ Π½Π΅Ρ‚ индСксов, ΠΎΠ½Π° выглядит ΠΊΠ°ΠΊ ΠΊΡƒΡ‡Π° Π΄Π°Π½Π½Ρ‹Ρ… (Heap). Π’ Π½Π΅ΠΉ всС записи хранятся Ρ…Π°ΠΎΡ‚ΠΈΡ‡Π½ΠΎ, Π±Π΅Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ порядка.

Если Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, sql server просканируСт Π΅Π΅ (Table scan). Пока Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½Π΅ Π·Π°Π΄Π°Π½Ρ‹ индСксы, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ограничСния (UNIQUE CONSTRAINT, UNIQUE INDEX ΠΈΠ»ΠΈ PRIMARY KEY), сСрвСр ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚ всС Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅ записи (с ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π΄ΠΎ послСднСй) ΠΈ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‚ условиям поиска.

Π­Ρ‚ΠΎ дСмонстрируСт Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ indexes:

  • ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ скорости поиска ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ запросов;
  • сохранСниС цСлостности Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· обСспСчСниС ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ строк Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Но Π½Π΅ всСгда индСкс ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ поиск ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Для Ρ‚Π°Π±Π»ΠΈΡ† Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ эффСктивнСС Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ индСксам.

Indexes ΠΈΠΌΠ΅ΡŽΡ‚ ΠΈ нСдостатки:

  • трСбуСтся ΠΌΠ½ΠΎΠ³ΠΎ мСста Π½Π° дисковом пространствС ΠΈ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. Π§Π΅ΠΌ Π΄Π»ΠΈΠ½Π½Π΅Π΅ ΠΊΠ»ΡŽΡ‡, Ρ‚Π΅ΠΌ большСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π° индСкс ΠΈ мСсто для Π΅Π³ΠΎ хранСния;
  • замСдляСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ систСмы (ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ вставок, обновлСния Π»ΠΈΠ±ΠΎ удалСния записСй).

Но соврСмСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΡ… создания ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠ½ΠΈΠΆΠ°Ρ‚ΡŒ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ эффСкт для Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π½ΠΎ ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°

ВсС индСксы ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ структуру. Они состоят ΠΈΠ·:

  • Π½Π°Π±ΠΎΡ€ΠΎΠ² страниц;
  • ΡƒΠ·Π»ΠΎΠ², ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΡƒΡŽ структуру, ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠΎ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅.

ВсС ΠΎΠ½ΠΈ хранятся Π² Π²ΠΈΠ΄Π΅ сбалансированных B-Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² (B-tree). Начало Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° располоТСно Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ ΡƒΠ·Π»Π΅ (находящимся Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ) ΠΈ ΠΏΠΎ сути являСтся Β«Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π΄Π²Π΅Ρ€ΡŒΡŽΒ». Π­Ρ‚ΠΎΡ‚ ΡƒΠ·Π΅Π» ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ страницу, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ содСрТатся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΊΠ»ΡŽΡ‡ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ.

Π’ Π½ΠΈΠΆΠ½Π΅ΠΉ части ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ располоТСны Π»ΠΈΡΡ‚ΡŒΡ Π΄Π΅Ρ€Π΅Π²Π° (ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌΠΈ ΡƒΠ·Π»Π°ΠΌΠΈ). Π”Π»ΠΈΠ½Ρ‹ Π²Π΅Ρ‚ΠΎΠΊ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹.

Π’ Ρ‚Π°ΠΊΠΎΠΌ Π΄Π΅Ρ€Π΅Π²Π΅ сбалансирована каТдая Π²Π΅Ρ‚ΠΊΠ°. Благодаря Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌΡƒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡƒ ΠΏΡ€ΠΈ Π»ΡŽΠ±Ρ‹Ρ… измСнСниях Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ снова становится сбалансированным.

ΠŸΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ запроса ΠΊ индСксированному столбцу подсистСма Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ процСсс поиска с Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΡƒΠ·Π»Π° ΠΊ Π½ΠΈΠΆΠ½ΠΈΠΌ, проходя ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΈ обрабатывая ΠΈΡ…. На ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ располагаСтся всС Π±ΠΎΠ»Π΅Π΅ развСрнутая информация ΠΎ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ достигаСтся Π½ΠΈΠΆΠ½ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π»ΠΈΡΡ‚ΡŒΠ΅Π² (leaf level) поиск прСкращаСтся, Ρ‚.ΠΊ. подсистСма запросов Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π’ΠΈΠΏΡ‹ индСксов (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ MS SQL)

Π’ Microsoft SQL Server ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ индСксы: кластСрныС ΠΈ нСкластСрныС.

ΠšΠ»Π°ΡΡ‚Π΅Ρ€Π½Ρ‹ΠΉ индСкс

Основная Π΅Π³ΠΎ Π·Π°Π΄Π°Ρ‡Π° β€” сохранСниС Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² Π²ΠΈΠ΄Π΅, отсортированном ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΊΠ»ΡŽΡ‡Π°. Π’Π°Π±Π»ΠΈΡ†Π΅ ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ присущ лишь СдинствСнный кластСризованный индСкс (Clustered index), ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² Π΅Π΄ΠΈΠ½ΠΎΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΌ порядкС – Π»ΠΈΠ±ΠΎ возрастания, Π»ΠΈΠ±ΠΎ убывания. По возмоТности, Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Clustered index.

Π’Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ отсортированными лишь Π² Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈΠΌΠ΅Π΅Ρ‚ кластСризованный индСкс. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Clustered index Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² уровнях Π»ΠΈΡΡ‚ΡŒΠ΅Π².

Если Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π΅Ρ‚ Clustered index, Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ формирования ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ PRIMARY KEY ΠΈ UNIQUE, ΠΎΠ½ формируСтся автоматичСски. Когда для Ρ‚Π°Π±Π»ΠΈΡ†/ΠΊΡƒΡ‡ созданы Nonclustered indexes, Ρ‚ΠΎ Π² процСссС создания Clustered index всС нСкластСризованныС Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ пСрСстроСны.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ Π»ΠΈΡΡ‚ΡŒΠ΅Π² зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, индСкс кластСрный ΠΈΠ»ΠΈ нСкластСрный. Они ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚Π°ΠΊ ΠΈ ссылки, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π½Π° строки с Π½ΠΈΠΌΠΈ.

НСкластСрный индСкс

НСкластСризованными (Nonclustered) Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ индСксы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат:

  • значСния ΠΊΠ»ΡŽΡ‡Π΅ΠΉ – ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ столбцы, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹;
  • ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° строки Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, содСрТащиС Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ (значСния ΠΊΠ»ΡŽΡ‡Π°).

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, для систСмы подзапросов потрСбуСтся ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ хранятся.

Он ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π°:

  • ΠΊΡƒΡ‡Ρƒ ΠΈ Ρ‚Π΅ΠΌ самым ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ строки с искомыми Π΄Π°Π½Π½Ρ‹ΠΌΠΈ;
  • Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ с Clustered index, указывая, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‡Ρ‚ΠΎ для поиска Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Nonclustered indexes ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ столбцами (included column). А Π·Π½Π°Ρ‡ΠΈΡ‚, Π»ΠΈΡΡ‚ΡŒΡ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ значСния индСксированных ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… нСиндСксированных столбцов. Π­Ρ‚ΠΎ свойство Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ограничСния, Π²ΠΎΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π½Π° индСкс. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ нСиндСксируСмыС столбцы Π»ΠΈΠ±ΠΎ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ограничСния Π½Π° Π΄Π»ΠΈΠ½Ρƒ индСкса.

Π“Π»Π°Π²Π½Ρ‹Π΅ свойства Nonclustered indexes:

  • ΠΈΡ… нСльзя ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ;
  • Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈΠ»ΠΈ прСдставлСниС ΠΌΠΎΠΆΠ½ΠΎ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ²Ρ‹ΡˆΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ (Π΄ΠΎ 999) нСкластСризованных индСксов. Но Π½Π΅ стоит ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ максимальноС количСство Nonclustered indexes. НуТно ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ способны ΠΊΠ°ΠΊ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ, Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.
  • Nonclustered indexes ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π½Π° Π»ΡŽΠ±Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…, Π² Ρ‚ΠΎΠΌ числС ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… кластСрный индСкс.

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ индСксов

БущСствуСт большоС число ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… индСксов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ кластСрными, Ρ‚Π°ΠΊ ΠΈ нСкластСрными. НиТС прСдставлСны Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ….

Π€ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅ΠΌΡ‹ΠΉ

Π€ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅ΠΌΡ‹ΠΌ (Filtered) индСксом Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Nonclustered index, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ задСйствован ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° для индСксации части строк Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

Π’Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ спроСктированный Filtered index способСн:

  • ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ;
  • ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° обслуТиваниС ΠΈ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ индСксов.

Боставной

Боставным Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ индСкс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ:

  • ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ (Π΄ΠΎ 16) столбцов, Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ значСниями;
  • ограничиваСтся ΠΎΠ±Ρ‰Π΅ΠΉ Π΄Π»ΠΈΠ½ΠΎΠΉ (Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‰Π΅ΠΉ 900 Π±Π°ΠΉΡ‚);
  • содСрТит поля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ Π΅Π΄ΠΈΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ индСксы, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ составных, ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ лишь ΠΏΠΎ СдинствСнному столбцу.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ составных индСксов цСлСсообразно, ΠΊΠΎΠ³Π΄Π°:

  • для поискового запроса ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π΄Π²Π° ΠΈ Π±ΠΎΠ»Π΅Π΅ столбцов;
  • Π² поисковом запросС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ всС поля составного индСкса. ΠŸΠΎΠΈΡΠΊΠΎΠ²Ρ‹ΠΉ запрос, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅ задСйствованы всС поля, вСроятнСС всСго, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

ΠžΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹ΠΉ справочник. Он сформирован ΠΏΠΎ Ρ„Π°ΠΌΠΈΠ»ΠΈΠΈ ΠΈ ΠΈΠΌΠ΅Π½ΠΈ, Ρ‚.ΠΊ. ΠΌΠ½ΠΎΠ³ΠΎ людСй ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ Ρ„Π°ΠΌΠΈΠ»ΠΈΡŽ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ ΠΏΠΎ Ρ„Π°ΠΌΠΈΠ»ΠΈΠΈ, ΠΈ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ.

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΈΠ²Ρ‹ΡΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π² процСссС сортировки ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°ΠΌ, описываСмым Π² CREATE INDEX. ΠŸΠΎΡ‚ΠΎΠΌΡƒ, Π² числС ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ индСкс Π±Ρ‹Π» задСйствован ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, сам запрос ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ, ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π²ΠΎΠΉ.

ИспользованиС составных индСксов ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π·Π° счСт Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ для выполнСния поиска Π΄Π°Π½Π½Ρ‹Ρ… сСрвСр Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ число индСксов.

Query Optimizer ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΡ… Π² зависимости ΠΎΡ‚ структуры запроса.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ запросов ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь: ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запроса. Π§Π°ΡΡ‚ΡŒ пСрвая, ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов. Вторая Ρ‡Π°ΡΡ‚ΡŒ

Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ

Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ (Unique) Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ индСкс, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ всСх строк ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ»ΡŽΡ‡Π΅ индСкса Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Для составного ΠΊΠ»ΡŽΡ‡Π° понятиС ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ касаСтся всСх index columns, Π½ΠΎ Π½Π΅ распространяСтся Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ столбСц Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Если Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ формируСтся Unique index ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ ряду столбцов, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ каТдая вариация Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΊΠ»ΡŽΡ‡Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ.

SQL сСрвСром создаСтся автоматичСски Unique index для ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… столбцов ΠΏΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ UNIQUE Π»ΠΈΠ±ΠΎ PRIMARY KEY. Но ΠΎΠ½ формируСтся лишь ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ условия отсутствия Π΄ΡƒΠ±Π»Π΅ΠΉ Π² ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… столбцах Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ индСкс создаСтся автоматичСски ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ столбца:

  • ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ (Π½Π° ΠΎΠ΄ΠΈΠ½ столбСц Π»ΠΈΠ±ΠΎ сразу Π½Π° нСсколько), ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ кластСрный индСкс Ρ€Π°Π½Π΅Π΅ Π½Π΅ создавался. Π’ Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ всС-Ρ‚Π°ΠΊΠΈ ΡƒΠΆΠ΅ создан, сСрвСр создаст ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ нСкластСрный индСкс ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ;
  • ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π½Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ – сСрвСром создаСтся Unique Nonclustered index. Когда кластСрный индСкс Π½Π΅ Π±Ρ‹Π» сформирован Π·Π°Ρ€Π°Π½Π΅Π΅, Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания ΠΈΠΌΠ΅Π½Π½ΠΎ Unique Clustered index.

ΠšΠΎΠ»ΠΎΠ½ΠΎΡ‡Π½Ρ‹ΠΉ

ΠšΠΎΠ»ΠΎΠ½ΠΎΡ‡Π½Ρ‹ΠΌ (Columnstore) Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ индСкс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΄Π°Π½Π½Ρ‹Π΅ хранятся Π² столбцах. ИспользованиС Columnstore indexes Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ цСлСсообразно ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ для ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰, Ρ‚.ΠΊ. ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚:

  • ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ запросов ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π² нСсколько Ρ€Π°Π·;
  • Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ (благодаря ΠΈΡ… ΡΠΆΠ°Ρ‚ΠΈΡŽ).

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΌ (Spatial) Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ‚ΠΈΠΏ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ³ΠΎ индСкса, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ столбцы с пространствСнными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ (прСдставлСнныС Π² Ρ‚ΠΈΠΏΠ°Ρ… Geography ΠΈΠ»ΠΈ Geometry). Spatial index позволяСт Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ запросов ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ пространствСнных столбцов ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π½ΠΈΡ….

ОсновноС условиС создания пространствСнного индСкса – Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ PRIMARY KEY для Ρ‚Π°Π±Π»ΠΈΡ†.

ΠŸΠΎΠ»Π½ΠΎΡ‚Π΅ΠΊΡΡ‚ΠΎΠ²Ρ‹ΠΉ

ΠŸΠΎΠ»Π½ΠΎΡ‚Π΅ΠΊΡΡ‚ΠΎΠ²Ρ‹Π΅ (Full-text) индСксы ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ эффСктивности поиска ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… слов Π² строках, Π³Π΄Π΅ Π΄Π°Π½Π½Ρ‹Π΅ прСдставлСны Π² символах.

ДСйствия ΠΏΠΎ созданию ΠΈ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Π½ΠΈΡŽ Full-text indexes Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ «заполнСниями». Π’ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ заполнСния:

  • ΠΏΠΎΠ»Π½ΠΎΠ΅ – осущСствляСтся SQL сСрвСром послС создания Π½ΠΎΠ²ΠΎΠ³ΠΎ Full-text index. Π Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ влияСт Π½Π° Π·Π°Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ объСм рСсурсов. ΠŸΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ рСсурсы большСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. ΠŸΠΎΡ‚ΠΎΠΌΡƒ прСдусмотрСна Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ откладывания этого процСсса;
  • основанноС Π½Π° отслСТивании ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ – примСняСтся для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ Full-text index послС ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ заполнСния (ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ).

ΠŸΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ

ΠŸΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ (Covering) Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ индСкс, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ запрос ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² ΠΏΠΎΠ»Π½ΠΎΠΌ объСмС с Π»ΠΈΡΡ‚ΡŒΠ΅Π² индСкса, Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ записям Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. А Π·Π½Π°Ρ‡ΠΈΡ‚, Π² Covering index хранится достаточный объСм Π΄Π°Π½Π½Ρ‹Ρ… для ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° запрос. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Π½Π΅Ρ‚ нСобходимости ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

Благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±Π΅Π· использования Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ индСксы быстрСС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ…. Однако, ΠΎΠ½ΠΈ становятся достаточно большими, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Π·Π»ΠΎΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒ ΠΈΠΌΠΈ Π½Π΅ стоит.

XML-индСкс

XML – спСцифичСский Ρ‚ΠΈΠΏ индСкса, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² столбцах Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, прСдставлСнными Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. Он Π΄Π΅Π»Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ эффСктивной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ поисковых запросов ΠΊ Π½ΠΈΠΌ.

Π’ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ XML-indexes:

  • ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Π΅ – ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΡƒΡŽΡ‚, хранят Π² столбцах XML Ρ‚Π΅Π³ΠΈ, ΠΏΡƒΡ‚ΠΈ, значСния. ЦСлСсообразно ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈΠΌΠ΅Π΅Ρ‚ кластСрный индСкс;
  • Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹Π΅ – ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ лишь для Ρ‚Π°Π±Π»ΠΈΡ† с ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ XML-index. ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ для увСличСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ систСмы ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ обращСния ΠΊ XML-столбцам. Π’ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Ρ‚ΠΈΠΏΡ‹ XML-indexes: PATH, VALUE, PROPERTY.

Π˜Π½Π΄Π΅ΠΊΡΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…

Активно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ индСксы для Ρ‚Π°Π±Π»ΠΈΡ† Π΄Π°Π½Π½Ρ‹Ρ…:

  • ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ для памяти (In-Memory OLTP). К Ρ‚Π°ΠΊΠΎΠ²Ρ‹ΠΌ относятся Π₯эш индСксы (Hash);
  • Nonclustered indexes, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ для сканирования (ΠΊΠ°ΠΊ упорядочСнного, Ρ‚Π°ΠΊ ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π½ΠΎΠ³ΠΎ) ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ для памяти.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ индСксов Π² ms sql server

Польза индСксов ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΡ€Π°ΠΉΠ½Π΅ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎ. Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ способны ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π° Π½Π΅ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ – ΠΏΠΎΠ½ΠΈΠ·ΠΈΡ‚ΡŒ.

Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ достаточно ΠΌΠ½ΠΎΠ³ΠΎ дискового мСста, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡ… большС, Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ строк, автоматичСски ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈ индСксы. Π­Ρ‚ΠΎ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ увСличСния рСсурсов ΠΈ Π³Ρ€ΠΎΠ·ΠΈΡ‚ΡŒ сниТСниСм ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠžΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ряд Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊΠ°ΠΊ ΠΊ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ ΠΊ запросам Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌ ΠΊ Π½ΠΈΠΌ.

Π‘Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Как сказано Π²Ρ‹ΡˆΠ΅, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ систСмы Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ зависит ΠΎΡ‚ индСксов. ΠŸΡ€ΠΈ поступлСнии запроса ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π΅, обСспСчивая быстрый поиск Π΄Π°Π½Π½Ρ‹Ρ… Π»ΠΈΠ±ΠΎ ΡΠ½ΠΈΠΆΠ°Ρ‚ΡŒ, Ρ‚.ΠΊ. ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΈ ΠΎΠ½ΠΈ, Π΄Π°Π±Ρ‹ ΠΎΡ‚Ρ€Π°ΠΆΠ°Ρ‚ΡŒ дСйствия, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π½Π°Π΄ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. И Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ происходит с Π½ΠΈΠΌΠΈ – Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅.

ΠŸΠΎΡ‚ΠΎΠΌΡƒ, ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΠ»Π°Π½Π° стратСгии ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ совСтов спСциалистов:

  • Если прСдполагаСтся частоС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, Ρ‚ΠΎ для Π½Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ индСксов.
  • Для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ со Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ количСством Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π΅Π΄ΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎ число индСксов, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ запросов. Но для Ρ‚Π°Π±Π»ΠΈΡ† нСбольшого объСма Π½Π΅ всСгда цСлСсообразно Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π’Π°ΠΊΠΎΠΉ поиск ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ дольшС, Ρ‡Π΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ сканированиС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.
  • Для Clustered indexes ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ самыС ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ поля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ допустимы. Π›ΡƒΡ‡ΡˆΠ΅ всСго ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π° столбцах с ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями ΠΈ Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ допускаСтся использованиС NULL. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Ρ‡Π°Ρ‰Π΅ всСго PRIMARY KEY выступаСт Π² Ρ€ΠΎΠ»ΠΈ Clustered index.
  • ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ индСкса Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, насколько ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ значСния Π² столбцС. Она сниТаСтся с ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π΄ΡƒΠ±Π»Π΅ΠΉ Ссли Π² столбцС ΠΈ растСт с ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ΠΌ. ΠŸΠΎΡ‚ΠΎΠΌΡƒ, ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ возмоТности слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ индСкс.
  • Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ составной индСкс, Ρ‚ΠΎ Π² Π½Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ порядок столбцов. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌΠΈ ΠΈΠ΄ΡƒΡ‚ Ρ‚Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² выраТСниях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ WHERE. Π—Π° Π½ΠΈΠΌΠΈ – столбцы с Π½Π°ΠΈΠ²Ρ‹ΡΡˆΠΈΠΌΠΈ показатСлями ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π²Ρ‹ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ пониТСния этого показатСля.
  • ДопускаСтся использованиС индСкса Π½Π° вычисляСмых столбцах Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π½ΠΎ лишь ΠΏΡ€ΠΈ условии соблюдСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ (для вычислСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‚Π°ΠΊΠΎΠ³ΠΎ столбца ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ дСтСрминистичСскиС выраТСния, Ρ‚.Π΅. Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° входящих ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² всР10000 ΅Π³Π΄Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ).

Запросы ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Π²Π°ΠΆΠ½Ρ‹ΠΌ ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠΌ являСтся ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ ΡƒΡ‡Π΅Ρ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ запросы ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. НСобходимо ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ частоту измСнСния Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ трСбуСтся соблюдСниС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ²:

  • ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ΄ΠΈΠ½ запрос содСрТал наибольшСС число строк, Π½Π΅ΠΆΠ΅Π»ΠΈ Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ число ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… запросов.
  • На столбцах, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² запросах с WHERE Ρ‡Π°Ρ‰Π΅ всСго, ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Nonclustered index Π² качСствС условия поиска ΠΈ соСдинСния Π² JOIN.
  • Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ возмоТностями индСксирования столбцов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² поисковых запросах Π½Π° соотвСтствиС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ значСниям.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ индСксов

ПослС выполнСния Π»ΡŽΠ±Ρ‹Ρ… дСйствий с Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ sql сСрвСром Π² Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚ производятся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΊΠΈ Π² индСксах. Бпустя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя всС ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ исправлСния ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΏΡ€ΠΎΠ²ΠΎΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Π±Ρ€ΠΎΡΠ°Ρ‚ΡŒ ΠΏΠΎ всСй Π±Π°Π·Π΅.

Подобная фрагмСнтация Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ пониТСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. ΠŸΠΎΡ‚ΠΎΠΌΡƒ ΠΊΡ€Π°ΠΉΠ½Π΅ Π²Π°ΠΆΠ½ΠΎ врСмя ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Π΅Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ. К ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ опСрациям ΠΏΠΎ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Π½ΠΈΡŽ индСксов относят Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ пСрСстроСниС индСксов.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ трСбуСтся провСсти – Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ пСрСстроСниС, слСдуСт Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Она ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ способ Π΄Π΅Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ эффСктивным ΠΈ Ρ‡Ρ‚ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ.

Богласно рСкомСндациям Microsoft, ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ уровня Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ:

  • мСньшС 5% – ΠΎ Π΄Π΅Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ слСдуСт ΠΏΠΎΠΊΠ° Π·Π°Π±Ρ‹Ρ‚ΡŒ;
  • ΠΎΡ‚ 5 Π΄ΠΎ 30% – трСбуСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ индСкса. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ минимального количСства рСсурсов систСмы ΠΈ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ провСсти Π±Π΅Π· Π΄ΠΎΠ»Π³ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ;
  • ΡΠ²Ρ‹ΡˆΠ΅ 30% – слСдуСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ пСрСстроСниС индСкса. ΠŸΡ€ΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ это Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ эффСктивно.

РСорганизация индСкса

Π Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ процСсс устранСния Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ индСкса. Π’ Π΅Π³ΠΎ Ρ…ΠΎΠ΄Π΅ происходит дСфрагмСнтация ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ уровня кластСрных ΠΈ нСкластСрных индСксов ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ ΠΈ прСдставлСниям. Говоря простым языком – выполняСтся простоС пСрСупорядочиваниС страниц. Π’ основС пСрСупорядочивания Π»Π΅ΠΆΠΈΡ‚ логичСский порядок ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ² (выполняСтС слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ).

ΠŸΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ индСкса

ΠŸΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ΠΌ называСтся опСрация ΠΏΠΎ ΡƒΡΡ‚Ρ€Π°Π½Π΅Π½ΠΈΡŽ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ индСкса. Он Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² устранСнии старого ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² ВсС, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ индСксы MS SQL

ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠžΠ±Ρ‰Π°Ρ информация
ΠžΠ±Π»Π°ΡΡ‚ΡŒ сравнСния ΠŸΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π¨Π°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ РСпликация
Основная функция ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ УскорСниС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ
ΠœΠ΅Ρ‚ΠΎΠ΄ Π Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΌΡƒ ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвСрами
РаспрСдСлСниС ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠ΅ ЀизичСскоС По Π²Π΅Π΄ΡƒΡ‰ΠΈΠΌ ΠΈ Π²Π΅Π΄ΠΎΠΌΡ‹ΠΌ сСрвСрам
ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” это процСсс увСличСния Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… рСсурсов систСмы для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… объСмов Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Ρ‹Π²Π°Π΅Ρ‚ Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ²:

  • Π’Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Vertical Scaling, Scale-Up): Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ мощности ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСрвСра (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ процСссоров, памяти ΠΈΠ»ΠΈ дисков).

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°: Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π΅Π· нСобходимости измСнСния Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ систСмы.

НСдостатки: ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ возмоТностями оборудования.

  • Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Horizontal Scaling, Scale-Out): Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ большСго количСства сСрвСров для распрСдСлСния Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°: Π›Π΅Π³ΠΊΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство сСрвСров.

НСдостатки: Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ слоТного управлСния ΠΈ настройки для поддСрТания согласованности Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ распрСдСлСния Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь: Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ инфраструктуры

ΠŸΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

Π Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ β€” это ΠΌΠ΅Ρ‚ΠΎΠ΄ распрСдСлСния Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ части, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ (partitions). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π» ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ запросов ΠΈ управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

ЦСль: Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния запросов, ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° систСму ΠΈ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

Π’ΠΈΠΏΡ‹ разбиСния:

  • Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ (horizontal partitioning) β€” строки Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌ.
  • Π’Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ (vertical partitioning) β€” ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌ.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°: Быстрая ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, эффСктивноС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ старых Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ²).

НСдостатки: Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π² случаях, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ бэкап ΠΈΠ»ΠΈ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ· бэкапа, ΠΈ Π½Π΅ освободит мСсто Π½Π° дискС.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ партицирования для PostgreSQL ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь: ΠŸΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ† Π² PostgreSQL

Π¨Π°Ρ€Π΄ΠΈΠ½Π³

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

Π¨Π°Ρ€Π΄ΠΈΠ½Π³ β€” это ΠΌΠ΅Ρ‚ΠΎΠ΄ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ разбиСния Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° нСсколько Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ сСрвСров (ΡˆΠ°Ρ€Π΄ΠΎΠ²), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° ΠΎΠ΄ΠΈΠ½ сСрвСр ΠΈ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ систСмы. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ "ΡˆΠ°Ρ€Π΄" Ρ…Ρ€Π°Π½ΠΈΡ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ сСрвСрам ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ гСографичСским Ρ€Π΅Π³ΠΈΠΎΠ½Π°ΠΌ ΠΈΠ»ΠΈ ΠΏΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ).

ЦСль: ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ роста Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° систСму, распрСдСляя ΠΈΡ… Π½Π° нСсколько сСрвСров.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°: ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, сниТаСт Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° ΠΎΠ΄ΠΈΠ½ сСрвСр, ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ.

НСдостатки: ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (потСря части Π΄Π°Π½Π½Ρ‹Ρ…, поврСТдСния Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°), Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ риск Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠ΅Π½Π΅Π΅ эффСктивно. ΠΠ΅ΡΠ±Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… (ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ сСрвСр ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΌ). ΠŸΠΎΡ‚Π΅Ρ€Ρ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ слоТных запросах (ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΊ нСскольким ΡˆΠ°Ρ€Π΄Π°ΠΌ).

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь: Π¨Π°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

РСпликация

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

РСпликация β€” это процСсс копирования Π΄Π°Π½Π½Ρ‹Ρ… с ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСрвСра Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ сСрвСры для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ доступности Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ отказоустойчивости систСмы. Π Π΅ΠΏΠ»ΠΈΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° Ρ‚Π΅Ρ… ΠΆΠ΅ ΠΈΠ»ΠΈ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… сСрвСрах, ΠΈ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для распрСдСлСния Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ копирования ΠΈΠ»ΠΈ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ³ΠΎ восстановлСния.

ЦСль: ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ доступности Π΄Π°Π½Π½Ρ‹Ρ…, ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ чтСния ΠΈ обСспСчСниС Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈ сбоях (failover).

Π’ΠΈΠΏΡ‹ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ:

  • Бинхронная β€” измСнСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊΠΎ всСм Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°ΠΌ.
  • Асинхронная β€” Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°: ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ, Π·Π°Ρ‰ΠΈΡ‚Ρƒ ΠΎΡ‚ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, балансировку Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΡ€ΠΈ большом количСствС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ чтСния.

НСдостатки: Π±ΠΎΠ»Π΅Π΅ высокиС Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² ΠΎΠ΄Π½ΠΈΡ… ΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ограничСния ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ процСсса дублирования, сохранСниС согласованности ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ сСтСвой Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, нСсогласованныС Π΄Π°Π½Π½Ρ‹Π΅.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь: РСпликация Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…

Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…

Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

Вранзакция β€” это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, выполняСмых ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅. Если хотя Π±Ρ‹ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π΅ удаётся, вся транзакция откатываСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…. Она Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ благодаря ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ «всё, ΠΈΠ»ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎΒ».

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ для обновлСния статуса Π·Π°ΠΊΠ°Π·Π° ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ количСства Ρ‚ΠΎΠ²Π°Ρ€Π° Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ inventory.

BEGIN TRANSACTION;
-- ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ orders
UPDATE orders
SET status = 'shipped'
WHERE order_id = 123;
--ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ inventory
UPDATE inventory
SET quantity = quantity - 1
WHERE product_id = 456;
COMMIT TRANSACTION;

Если ΠΎΠ±Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ΡΡ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, транзакция фиксируСтся, ΠΈ измСнСния Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… становятся постоянными.

ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ объяснСниС ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь: Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция

ACID

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

Бвойства ACID ΠΈ Π Π‘Π£Π‘Π”

Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ рСляционных Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ основными свойствами: Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ, ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ, изоляция ΠΈ Π΄ΠΎΠ»Π³ΠΎΠ²Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ Π°Π±Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ ACID ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² систСмах управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

  • ΠΠ΅Ρ€Π°Π·Ρ€Ρ‹Π²Π½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ опрСдСляСт всС элСмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… - каТдая транзакция Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ выполняСтся, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ откатываСтся.
  • Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ опрСдСляСт ΠΏΡ€Π°Π²ΠΈΠ»Π° сохранСния состояния Π΄Π°Π½Π½Ρ‹Ρ… послС выполнСния Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ - транзакция ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ согласованного состояния Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅.
  • Π˜Π·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹ транзакция Π½Π΅ повлияСт Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ элСмСнты Π΄ΠΎ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ сохранСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ - ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΈΡ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.
  • ΠΠ΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ Π΄ΠΎΠ»Π³ΠΎΠ²Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ обСспСчиваСт Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… послС сохранСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ - послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π΅Ρ‘ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ сохранСны Π΄Π°ΠΆΠ΅ Π² случаС сбоя систСмы.

Π£Ρ€ΠΎΠ²Π½ΠΈ изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

Π£Ρ€ΠΎΠ²Π½ΠΈ изоляции

Π£Ρ€ΠΎΠ²Π½ΠΈ изоляции ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, ΠΊΠ°ΠΊ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ, ΠΈ сколько "грязных" Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ. БущСствуСт Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ основных уровня изоляции:

Serializable (Π‘Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ):

  • ОписаниС: Π‘Π°ΠΌΡ‹ΠΉ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции.
  • ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°: ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС Ρ‚ΠΈΠΏΡ‹ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ (грязноС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, Π½Π΅ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰Π΅Π΅ΡΡ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, Ρ„Π°Π½Ρ‚ΠΎΠΌΠ½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅).
  • НСдостатки: ΠœΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ фактичСски Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

Repeatable Read (ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΡΠ΅ΠΌΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅):

  • ОписаниС: Π“Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ, Π½Π΅ измСнятся Π΄ΠΎ Π΅Ρ‘ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ.
  • ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°: ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ грязноС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ Π½Π΅ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰Π΅Π΅ΡΡ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅.
  • НСдостатки: НС ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ„Π°Π½Ρ‚ΠΎΠΌΠ½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅.

Read Committed (ЀиксированноС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅):

  • ОписаниС: Вранзакция Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ зафиксированныС Π΄Π°Π½Π½Ρ‹Π΅.
  • ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°: ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ грязноС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅.
  • НСдостатки: НС ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰Π΅Π΅ΡΡ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ Ρ„Π°Π½Ρ‚ΠΎΠΌΠ½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅.

Read Uncommitted (НСфиксированноС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅):

  • ОписаниС: Π‘Π°ΠΌΡ‹ΠΉ Π½ΠΈΠ·ΠΊΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции. Вранзакция ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½Π½Ρ‹Π΅ (Π½Π΅ зафиксированныС) Π΄Π°Π½Π½Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.
  • ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°: ΠΠ°ΠΈΠ²Ρ‹ΡΡˆΠ°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.
  • НСдостатки: Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ всС Ρ‚ΠΈΠΏΡ‹ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ (грязноС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, Π½Π΅ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰Π΅Π΅ΡΡ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, Ρ„Π°Π½Ρ‚ΠΎΠΌΠ½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅).

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ транзакциями

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ транзакциями Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ для обСспСчСния выполнСния Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² соотвСтствии с ACID-свойствами. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ:

  • Начало Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.
  • Ѐиксация Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ (COMMIT): Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ всСх ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, сдСланных Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.
  • ΠžΡ‚ΠΊΠ°Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ (ROLLBACK): ΠžΡ‚ΠΌΠ΅Π½Π° всСх ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, сдСланных Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.
  • Π–ΡƒΡ€Π½Π°Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Logging): Π—Π°ΠΏΠΈΡΡŒ всСх ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, для возмоТности восстановлСния Π² случаС сбоя.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΈΜ†Ρ‚ΠΈ здСсь: Π£Ρ€ΠΎΠ²Π½ΠΈ изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Π½Π° PostgreSQL, Π£Ρ€ΠΎΠ²Π½ΠΈ изолированности Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ для самых ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ…

Аномалии

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

Аномалии ΠΏΡ€ΠΈ транзакциях Π² контСкстС Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ систСм управлСния транзакциями β€” это ситуации, ΠΊΠΎΠ³Π΄Π° происходит Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ согласованности ΠΈ цСлостности Π΄Π°Π½Π½Ρ‹Ρ….

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚:

  • ΠŸΠΎΡ‚Π΅Ρ€ΡΠ½Π½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ (Lost Update): ΠŸΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚, ΠΊΠΎΠ³Π΄Π° Π΄Π²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ запись. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ потСряно.
-- Вранзакция 1
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;

-- Вранзакция 2
UPDATE accounts SET balance = balance + 200 WHERE account_id = 1;
  • ГрязноС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ (Dirty Read): ΠŸΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½Π° транзакция Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ, Π½ΠΎ Π΅Ρ‰Π΅ Π½Π΅ зафиксированы. Если другая транзакция откатываСтся, Π΄Π°Π½Π½Ρ‹Π΅, считанныС ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ, окаТутся Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΌΠΈ.
-- Вранзакция 1
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
-- НС фиксируСм измСнСния

-- Вранзакция 2
SELECT balance FROM accounts WHERE account_id = 1;
-- Π§ΠΈΡ‚Π°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ баланс
  • ΠΠ΅ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰Π΅Π΅ΡΡ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ (Non-repeatable Read): ΠŸΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚, ΠΊΠΎΠ³Π΄Π° Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ пСрвая транзакция Π²ΠΈΠ΄ΠΈΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ.
-- Вранзакция 1
SELECT balance FROM accounts WHERE account_id = 1;
-- Π§ΠΈΡ‚Π°Π΅Ρ‚ баланс

-- Вранзакция 2
UPDATE accounts SET balance = balance + 200 WHERE account_id = 1;
COMMIT;

-- Вранзакция 1
SELECT balance FROM accounts WHERE account_id = 1;
-- Π§ΠΈΡ‚Π°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ баланс
  • Π€Π°Π½Ρ‚ΠΎΠΌΠ½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ (Phantom Read): ΠŸΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½Π° транзакция нСсколько Ρ€Π°Π· выполняСт ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ запрос, ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ этими запросами другая транзакция добавляСт ΠΈΠ»ΠΈ удаляСт строки, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ этому запросу. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ пСрвая транзакция ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Π½Π°Π±ΠΎΡ€Ρ‹ строк.
-- Вранзакция 1
SELECT * FROM accounts WHERE balance > 1000;
-- ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½Π°Π±ΠΎΡ€ строк

-- Вранзакция 2
INSERT INTO accounts (account_id, balance) VALUES (3, 1500);
COMMIT;

-- Вранзакция 1
SELECT * FROM accounts WHERE balance > 1000;
-- ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½Π°Π±ΠΎΡ€ строк

Для прСдотвращСния этих Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΡƒΡ€ΠΎΠ²Π½ΠΈ изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ (Read Uncommitted, Read Committed, Repeatable Read, Serializable). Π‘ΠΎΠ»Π΅Π΅ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции обСспСчиваСт Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π·Π°Ρ‰ΠΈΡ‚Ρƒ ΠΎΡ‚ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ½ΠΈΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ систСмы.

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

Для обСспСчСния согласованности Π΄Π°Π½Π½Ρ‹Ρ… Π² случаС ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ обращСния ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ нСсколькими ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ, Π‘Π£Π‘Π” ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈΠ³Ρ€Π°ΡŽΡ‚ Π²Π°ΠΆΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² обСспСчСнии свойств Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ACID. Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ SELECT, DML ΠΈ DDL Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π° рСсурсы. НапримСр, Π² процСссС обновлСния строки Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ накладываСтся Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ ΠΆΠ΅ самыС Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя. Π­Ρ‚ΠΎ обСспСчиваСт Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ зафиксированных Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ мСсто послС ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ, Π½Π΅ ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. КаТдая транзакция Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒΡΡ, Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΠΎΠ»ΡƒΠΌΠ΅Ρ€.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡƒΡ€ΠΎΠ²Π½ΠΈ изоляции ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ влияниС Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ чтСния ΠΈ записи, Π½ΠΎ Ρ‚Π°ΠΊ описанноС Π²Ρ‹ΡˆΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько Ρ€Π°Π·Π½Ρ‹Ρ… свойств: Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Ρ€Π΅ΠΆΠΈΠΌ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ Π³Ρ€Π°Π½ΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. Π”Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ - это ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ рСсурс ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ. Π”Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ зависит, срСди ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, ΠΎΡ‚ Ρ€Π΅ΠΆΠΈΠΌΠ° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ Π²Ρ‹Π±ΠΎΡ€Π° уровня изоляции.

Π“Ρ€Π°Π½ΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ

  • Π’Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅: Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ всю Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹: Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² рСляционных Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

  • Π‘Ρ‚Ρ€ΠΎΡ‡Π½Ρ‹Π΅: Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ строки Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Π‘ΠΎΠ»Π΅Π΅ гранулярный ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ большС управляСмых рСсурсов.

  • Π‘Ρ‚Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Π΅: Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ страницы Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… систСмах для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ баланса ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ изоляциСй.

Π’ΠΈΠΏΡ‹ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ

Shared Lock (S-Π»ΠΎΠΊ):

  • ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ нСскольким транзакциям Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π½ΠΎ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ запись.
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ чтСния, Π³Π΄Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ чтСния.

Exclusive Lock (X-Π»ΠΎΠΊ):

  • Π—Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠΌ транзакциям ΠΊΠ°ΠΊ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ ΠΈ запись Π΄Π°Π½Π½Ρ‹Ρ….
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ записи, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ транзакциями Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ записи.

Intent Locks (I-Π»ΠΎΠΊΠΈ):

  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для обозначСния Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π½Π° Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ гранулярности.

Π’ΠΈΠΏΡ‹: Intent Shared (IS), Intent Exclusive (IX), and Shared Intent Exclusive (SIX) ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ, Ρ‡Ρ‚ΠΎ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π΄Π΅Π΄Π»ΠΎΠΊΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования эксклюзивной ΠΈ ΠΎΠ±Ρ‰Π΅ΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ:

BEGIN TRANSACTION;

-- Установка эксклюзивной Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π° строку
UPDATE accounts
SET balance = balance - 100
WHERE account_id = 1;

-- Установка ΠΎΠ±Ρ‰Π΅ΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π° строку
SELECT balance
FROM accounts WITH (HOLDLOCK)
WHERE account_id = 2;

COMMIT TRANSACTION;

Π’Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° (deadlock) - это особая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ доступа, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄Π²Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. Π’ частности, пСрвая транзакция Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, доступ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ другая транзакция, ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. (Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° нСсколькими транзакциями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Ρ†ΠΈΠΊΠ» зависимостСй.) Π’ этом состоянии ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ восстановится Π±Π΅Π· Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° ΠΈΠ·Π²Π½Π΅.

БистСма Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, выбирая ΠΎΠ΄Π½Ρƒ ΠΈΠ· Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ (Π½Π° самом Π΄Π΅Π»Π΅, Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, которая Π·Π°ΠΌΡ‹ΠΊΠ°Π΅Ρ‚ Ρ†ΠΈΠΊΠ» Π² запросах Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ) Π² качСствС "ΠΆΠ΅Ρ€Ρ‚Π²Ρ‹" ΠΈ выполняя Π΅Π΅ ΠΎΡ‚ΠΊΠ°Ρ‚. ПослС этого выполняСтся другая транзакция. Π­Ρ‚ΠΎ Π΄Π°Π»Π΅ΠΊΠΎ ΠΎΡ‚ ΠΈΠ΄Π΅Π°Π»Π°, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для вашСй Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π² Π½Π΅Ρ‘ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄ΡƒΡ‚.

Π•ΡΡ‚ΡŒ нСсколько условий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ для возникновСния Π²Π·Π°ΠΈΠΌΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ (условия ΠšΠΎΡ„ΠΌΠ°Π½Π°) - основа для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ, ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π²Π·Π°ΠΈΠΌΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.

Условия ΠšΠΎΡ„Ρ„ΠΌΠ°Π½Π°

  1. УсловиС Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ рСсурс Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠ»ΠΈ ΠΎΡ‚Π΄Π°Π½ Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ процСссу, ΠΈΠ»ΠΈ доступСн.
  2. УсловиС удСрТания ΠΈ оТидания. ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹, Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΒ­Ρ‰ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Ρ€Π°Π½Π΅Π΅ рСсурсы, ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ рСсурсы.
  3. УсловиС отсутствия ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ рСсурса. Π£ процСсса нСльзя ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π·Π°Π±Ρ€Π°Ρ‚ΡŒ Ρ€Π°Π½Π΅Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ рСсурсы. ΠŸΡ€ΠΎΡ†Π΅ΡΡ, Π²Π»Π°Π΄Π΅ΡŽΡ‰ΠΈΠΉ ΠΈΠΌΠΈ, Π΄ΠΎΠ»ΠΆΠ΅Π½ сам ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ рСсурсы.
  4. УсловиС цикличСского оТидания. Π”ΠΎΠ»ΠΆΠ½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ круговая ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΈ Π±ΠΎΠ»Π΅Π΅ процСссов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΆΠ΄Π΅Ρ‚ доступа ΠΊ рСсурсу, ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΌΡƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Ρ‡Π»Π΅Π½ΠΎΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π£ΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ условия ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ссли Ρ…ΠΎΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π½ΠΈΡ… Π½Π΅ выполняСтся, Ρ‚ΠΎ Π²Π·Π°ΠΈΠΌΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚.

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ Π₯ΠΎΠ»Ρ‚Π° (Holt)

ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ Π²Π·Π°ΠΈΠΌΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°Ρ… Π₯ΠΎΠ»Ρ‚Π° (Holt). Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Π₯ΠΎΠ»Ρ‚Π° прСдставляСт собой Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Π³Ρ€Π°Ρ„, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° ΡƒΠ·Π»ΠΎΠ²: процСссы (ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΡ€ΡƒΠΆΠΎΡ‡ΠΊΠ°ΠΌΠΈ) ΠΈ рСсурсы (ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΠΊΠ°ΠΌΠΈ). Π’ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ рСсурс ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ процСссом ΠΈ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ занят этим процСссом, указываСтся Ρ€Π΅Π±Ρ€ΠΎΠΌ (стрСлкой) ΠΎΡ‚ рСсурса ΠΊ процСссу. Π Π΅Π±Ρ€ΠΎ, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ΅ ΠΎΡ‚ процСсса, ΠΊ рСсурсу, ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ процСсс Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ ΠΈ находится Π² состоянии оТидания доступа ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ рСсурсу.

Holt diagram

Π”Π΅Π΄Π»ΠΎΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ мСсто Π±Ρ‹Ρ‚ΡŒ, Ρ‚ΠΎΠ³Π΄Π° ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Π₯ΠΎΠ»Ρ‚Π°, ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‰Π°Ρ состояния процСссов ΠΈ рСсурсов, содСрТит Ρ†ΠΈΠΊΠ».

Π‘Π£Π‘Π” Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ для обнаруТСния ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄Π΅Π΄Π»ΠΎΠΊΠΎΠ². Один ΠΈΠ· ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² - построСниС Π³Ρ€Π°Ρ„Π° оТидания (wait-for graph) ΠΈ выявлСниС Ρ†ΠΈΠΊΠ»ΠΎΠ² Π² этом Π³Ρ€Π°Ρ„Π΅.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π΄ΠΎΠ»Π³ΠΈΠ΅ оТидания, ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Ρ‹ для Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ. Если транзакция Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅Ρ€Π²Π°Π½Π°.

ДинамичСский Ρ‚ΡƒΠΏΠΈΠΊ (Livelock)

Π›Π°ΠΉΠ²Π»ΠΎΠΊ - это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π½ΠΎ эти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° ΠΏΡ€ΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ состояния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΏΠ΅Ρ€Π΅Π΄, Ρ‚.Π΅. это ситуация, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄Π²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ процСссов Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ свои состояния Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° измСнСния Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… процСссах Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π­Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Π΄Π΅Π΄Π»ΠΎΠΊ, Π½ΠΎ Ρ€Π°Π·Π½ΠΈΡ†Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ процСссы становятся β€œΠ²Π΅ΠΆΠ»ΠΈΠ²Ρ‹ΠΌΠΈβ€ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² поиска удалСния Π²Π·Π°ΠΈΠΌΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ livelock β€” взаимная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° образуСтся, сбрасываСтся, снова образуСтся, снова сбрасываСтся ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π›Π°ΠΉΠ²Π»ΠΎΠΊ - это подмноТСство Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π³ΠΎΠ»ΠΎΠ΄Π°Π½ΠΈΠ΅ΠΌ.

Π“ΠΎΠ»ΠΎΠ΄Π°Π½ΠΈΠ΅ (Starvation)

Π“ΠΎΠ»ΠΎΠ΄Π°Π½ΠΈΠ΅ β€” это любая ситуация, ΠΊΠΎΠ³Π΄Π° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ процСсс Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС рСсурсы, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для выполнСния Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

ΠŸΡ€ΠΈ Π»Π°ΠΉΠ²Π»ΠΎΠΊΠ΅ всС ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ процСссы ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ β€œΠ³ΠΎΠ»ΠΎΠ΄Π°ΡŽΡ‚β€, ΠΈ никакая Ρ€Π°Π±ΠΎΡ‚Π° Π½Π΅ выполняСтся Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°.

Π’ Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌ смыслС Π³ΠΎΠ»ΠΎΠ΄Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… процСссов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСсправСдливо ΠΌΠ΅ΡˆΠ°ΡŽΡ‚ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ»ΠΈ нСскольким Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌ процСссам Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ эффСктивно, насколько это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π›ΠΎΠΊΠ°ΠΌΠΈ

Lock Manager:

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ систСмы управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (Π‘Π£Π‘Π”), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ управляСт всСми запросами Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ запросы Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ освобоТдСниС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹, ΠΈ управляСт очСрСдями оТидания.

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈΠ³Ρ€Π°ΡŽΡ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² обСспСчСнии цСлостности Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, особСнно Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… систСмах.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΈΜ†Ρ‚ΠΈ здСсь: Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² PostgreSQL: 1. Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ, Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² PostgreSQL: 2. Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ строк, Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² PostgreSQL: 3. Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² PostgreSQL: 4. Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² памяти

MVCC

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

MVCC (Multi-Version Concurrency Control) β€” это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ управлСния ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠΎΠΌ Π² Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт нСскольким транзакциям Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π½Π΅ блокируя Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. Π­Ρ‚ΠΎ особСнно ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² систСмах с высокой ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ MVCC:

  • ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ вСрсий Π΄Π°Π½Π½Ρ‹Ρ…: ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ строки Π΄Π°Π½Π½Ρ‹Ρ… создаСтся новая вСрсия этой строки, Π° старая вСрсия сохраняСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π΅Ρ‘ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ. Π­Ρ‚ΠΎ позволяСт транзакциям Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΡ… Π½Π°Ρ‡Π°Π»Π°, Π΄Π°ΠΆΠ΅ Ссли ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ вносят измСнСния.
  • Π˜Π·ΠΎΠ»ΡΡ†ΠΈΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ: MVCC позволяСт Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… для чтСния. Π­Ρ‚ΠΎ достигаСтся Π·Π° счСт Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ каТдая транзакция Π²ΠΈΠ΄ΠΈΡ‚ свою "срСз" Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π°Ρ‡Π°Π»Π°.
  • ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ:
    • Π§Ρ‚Π΅Π½ΠΈΠ΅: Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, Π½Π΅ блокируя Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ каТдая транзакция Π²ΠΈΠ΄ΠΈΡ‚ свою Π²Π΅Ρ€ΡΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ….
    • Π—Π°ΠΏΠΈΡΡŒ: Когда транзакция обновляСт Π΄Π°Π½Π½Ρ‹Π΅, создаСтся новая вСрсия строки. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ старыС вСрсии строки, Π½Π΅ оТидая Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ записи.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°:

  • ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π·Π° счСт устранСния Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅.
  • ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Π°Ρ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ для систСм с большим количСством ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.

НСдостатки:

  • ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ управлСния мноТСством вСрсий Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ объСм Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.
  • Π‘Ρ‚Π°Ρ€Ρ‹Π΅ вСрсии Π΄Π°Π½Π½Ρ‹Ρ… Π½ΡƒΠΆΠ½ΠΎ пСриодичСски ΠΎΡ‡ΠΈΡ‰Π°Ρ‚ΡŒ (garbage collection), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ систСму.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ MVCC:

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ транзакция T1 Π½Π°Ρ‡Π°Π»Π° Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΠ³Π΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² строкС Π±Ρ‹Π»ΠΎ 100. Π—Π°Ρ‚Π΅ΠΌ транзакция T2 обновляСт эту строку Π΄ΠΎ 200. Вранзакция T1 ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 100, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΅Ρ‘ Π½Π°Ρ‡Π°Π»Π°. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя транзакция T3, которая Π½Π°Ρ‡Π°Π»Π°ΡΡŒ ΠΏΠΎΠ·ΠΆΠ΅, Π²ΠΈΠ΄ΠΈΡ‚ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 200.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ MVCC обСспСчиваСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ вСрсиями Π΄Π°Π½Π½Ρ‹Ρ… Π² зависимости ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π°Ρ‡Π°Π»Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь: Newbie Guide: разбираСмся с MVCC Π½Π° простых ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…

Или Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для PostgreSQL) (en): Chapter 9. Multi-Version Concurrency Control

SELECT FOR UPDATE ΠΈ SELECT FOR SHARE

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

Π’ SQL конструкции SELECT FOR UPDATE ΠΈ SELECT FOR SHARE ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для управлСния ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠΎΠΌ Π² транзакциях ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ строк, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½Ρ‹Π΅ измСнСния Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Π°ΠΆΠ½Ρ‹ для обСспСчСния цСлостности Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… систСмах.

SELECT FOR UPDATE

ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для получСния строк с ΠΈΡ… эксклюзивной Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ строки, Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ Π² запросС, Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ для ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ транзакциями Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° тСкущая транзакция Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ COMMIT ΠΈΠ»ΠΈ ROLLBACK).

Волько транзакция, которая Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»Π° SELECT FOR UPDATE, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ строки. Π”Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ строки с Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅: Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° планируСтся ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ строки послС ΠΈΡ… Π²Ρ‹Π±ΠΎΡ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ 629A ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

BEGIN;
SELECT * FROM employees WHERE department = 'Sales' FOR UPDATE;
-- Π’Π΅ΠΏΠ΅Ρ€ΡŒ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΎΡ‚Π΄Π΅Π»Ρƒ Sales, Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Ρ‹.
-- ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ с этими строками.
UPDATE employees SET salary = salary * 1.05 WHERE department = 'Sales';
COMMIT;

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ транзакция сначала Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ сотрудников ΠΎΡ‚Π΄Π΅Π»Π° 'Sales' ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ эти строки для дальнСйшСго обновлСния. Π”Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ эти строки Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

SELECT FOR SHARE

ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для получСния строк с "раздСляСмой" Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ эти строки, Π½ΠΎ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

Никто Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π²Ρ‹Π±Ρ€Π°Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ SELECT FOR SHARE, ΠΏΠΎΠΊΠ° тСкущая транзакция Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ эти Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ транзакциями Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

BEGIN;
SELECT * FROM products WHERE category = 'Electronics' FOR SHARE;
-- Π§Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ этих строк Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ транзакциями.
-- Π’ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π΅ удастся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ UPDATE ΠΈΠ»ΠΈ DELETE этих строк Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.
COMMIT;

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ транзакция Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ строки ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ 'products', блокируя Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡ… измСнСния Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ транзакциями. Однако Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ эти Π΄Π°Π½Π½Ρ‹Π΅.

Различия:

  • FOR UPDATE: Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ строки для всСх Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ. Волько тСкущая транзакция ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅.
  • FOR SHARE: Π Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠΌ транзакциям Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ строки, Π½ΠΎ Π½Π΅ позволяСт ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈΡ….
  • ОбС конструкции ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ измСнСниями Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ состояния Π³ΠΎΠ½ΠΊΠΈ (race conditions).

Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация

Π’Π΅ΠΎΡ€Π΅ΠΌΠ° CAP

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

Π’Π΅ΠΎΡ€Π΅ΠΌΠ° CAP (извСстная Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ Ρ‚Π΅ΠΎΡ€Π΅ΠΌΠ° Π‘Ρ€ΡŽΠ΅Ρ€Π°) β€” эвристичСскоС ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² любой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ распрСдСлённых вычислСний Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΡƒΡ… ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… свойств:

  • ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… (Π°Π½Π³Π». consistency) β€” Π²ΠΎ всСх Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΡƒΠ·Π»Π°Ρ… Π² ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡Π°Ρ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ;
  • Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ (Π°Π½Π³Π». availability) β€” любой запрос ΠΊ распрСдСлённой систСмС Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠΎΠΌ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π±Π΅Π· Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ всСх ΡƒΠ·Π»ΠΎΠ² систСмы ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚;
  • ΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΊ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ (Π°Π½Π³Π». partition tolerance) β€” расщСплСниС распрСдСлённой систСмы Π½Π° нСсколько ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… сСкций Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ нСкоррСктности ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ° ΠΎΡ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· сСкций.
Π’Π΅ΠΎΡ€Π΅ΠΌΠ° CAP

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ NoSQL, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ распрСдСлённыС Π½Π΅Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ этот ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π² качСствС обоснования нСизбСТности ΠΎΡ‚ΠΊΠ°Π·Π° ΠΎΡ‚ согласованности Π΄Π°Π½Π½Ρ‹Ρ…. Однако ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ ΡƒΡ‡Ρ‘Π½Ρ‹ΠΌΠΈ ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°ΠΌΠΈ Ρ‚Π΅ΠΎΡ€Π΅ΠΌΠ° CAP критикуСтся Π·Π° Π²ΠΎΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²ΠΊΠΈ ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅Π΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€Π½ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ смыслС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½Π° распространСна Π² сообщСствС.

БлСдствия

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ‚Π΅ΠΎΡ€Π΅ΠΌΡ‹ CAP, распрСдСлённыС систСмы вычислСний Π² зависимости ΠΎΡ‚ ΠΏΠ°Ρ€Ρ‹ практичСски ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… свойств ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ€Π°ΡΠΏΠ°Π΄Π°ΡŽΡ‚ΡΡ Π½Π° Ρ‚Ρ€ΠΈ класса β€” CA, CP, AP (ΠΏΡ€ΠΈ этом Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ систСмы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ стратСгии ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… запросов с использованиСм Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… систСм вычислСний).

  • Π’ систСмС вычислСний класса CA Π²ΠΎ всСх ΡƒΠ·Π»Π°Ρ… Π΄Π°Π½Π½Ρ‹Π΅ согласованы ΠΈ обСспСчСна Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ, ΠΏΡ€ΠΈ этом ΠΎΠ½Π° ΠΆΠ΅Ρ€Ρ‚Π²ΡƒΠ΅Ρ‚ ΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒΡŽ ΠΊ распаду Π½Π° сСкции. Π’Π°ΠΊΠΈΠ΅ систСмы Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π½Π° основС тСхнологичСского ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΎΡΡ‚ΡŒ Π² смыслС ACID, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΈΡ… систСм вычислСний ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π° основС кластСрных систСм управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ распрСдСлённая слуТба ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² LDAP.
  • БистСма вычислСний класса CP Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ обСспСчиваСт цСлостный Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈ способна Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² условиях распада, Π½ΠΎ достигаСт этого Π² ΡƒΡ‰Π΅Ρ€Π± доступности: ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΠΈΠΊ Π½Π° запрос. Π£ΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΊ распаду Π½Π° сСкции Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ обСспСчСния дублирования ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π²ΠΎ всСх ΡƒΠ·Π»Π°Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ систСмы, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅ΠΉ Π΄Π°Π½Π½ΡƒΡŽ систСму вычислСний, Π² связи с этим отмСчаСтся практичСская Ρ†Π΅Π»Π΅ΡΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΡΡ‚ΡŒ использования Π² Ρ‚Π°ΠΊΠΈΡ… систСмах распрСдСлённых пСссимистичСских Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ для сохранСния цСлостности.
  • Π’ систСмС вычислСний класса AP Π½Π΅ гарантируСтся Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Π½ΠΎ ΠΏΡ€ΠΈ этом Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ условия доступности ΠΈ устойчивости ΠΊ распаду Π½Π° сСкции. Π₯отя Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ систСм вычислСний Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° извСстны Π·Π°Π΄ΠΎΠ»Π³ΠΎ Π΄ΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° CAP (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, распрСдСлённыС Π²Π΅Π±-кэши ΠΈΠ»ΠΈ DNS), рост популярности Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ с этим Π½Π°Π±ΠΎΡ€ΠΎΠΌ свойств связываСтся ΠΈΠΌΠ΅Π½Π½ΠΎ с распространСниСм Ρ‚Π΅ΠΎΡ€Π΅ΠΌΡ‹ CAP. Π’Π°ΠΊ, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ NoSQL-систСм ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ цСлостности Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° Ρ‚Π΅ΠΎΡ€Π΅ΠΌΡƒ CAP ΠΊΠ°ΠΊ Π½Π° ΠΌΠΎΡ‚ΠΈΠ² Ρ‚Π°ΠΊΠΎΠ³ΠΎ ограничСния. Π—Π°Π΄Π°Ρ‡Π΅ΠΉ ΠΏΡ€ΠΈ построСнии AP-систСм становится обСспСчСниС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ практичСски цСлСсообразного уровня цСлостности Π΄Π°Π½Π½Ρ‹Ρ…, Π² этом смыслС ΠΏΡ€ΠΎ AP-систСмы говорят ΠΊΠ°ΠΊ ΠΎ «цСлостных Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅Β» (Π°Π½Π³Π». eventually consistent) ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΠΎ «слабо цСлостных» (Π°Π½Π³Π». weak consistent).

BASE-Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ 2000-Ρ… Π³ΠΎΠ΄ΠΎΠ² сформулирован ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΏΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΡŽ распрСдСлённых систСм, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… трСбования цСлостности ΠΈ доступности Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Π½Π΅ Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅, Π½Π°Π·Π²Π°Π½Ρ‹ΠΉ Π°ΠΊΡ€ΠΎΠ½ΠΈΠΌΠΎΠΌ BASE (ΠΎΡ‚ Π°Π½Π³Π». Basically Available, Soft-state, Eventually consistent β€” базовая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ, нСустойчивоС состояниС, ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счётС), ΠΏΡ€ΠΈ этом Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ противопоставляСтся ACID.

  • Под Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒΡŽ подразумСваСтся Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ прилоТСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сбой Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΠ·Π»Π°Ρ… ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ» ΠΊ ΠΎΡ‚ΠΊΠ°Π·Ρƒ Π² обслуТивании Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ части сСссий ΠΏΡ€ΠΈ сохранСнии доступности Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв.
  • НСустойчивоС состояниС ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΆΠ΅Ρ€Ρ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠ»Π³ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ΠΌ состояния сСссий (Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΊ, информация ΠΎ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ, контСкстС), ΠΏΡ€ΠΈ этом ΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΡƒΡΡΡŒ Π½Π° фиксации ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.
  • Богласованности Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счётС, Ρ‚Ρ€Π°ΠΊΡ‚ΡƒΡŽΡ‰Π΅ΠΉΡΡ ΠΊΠ°ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ противорСчивости Π΄Π°Π½Π½Ρ‹Ρ… Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях, Π½ΠΎ ΠΏΡ€ΠΈ обСспСчСнии согласования Π² практичСски ΠΎΠ±ΠΎΠ·Ρ€ΠΈΠΌΠΎΠ΅ врСмя, посвящСно Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ количСство ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… исслСдований.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ систСм ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь: Всё, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ Π·Π½Π°Π»ΠΈ ΠΎ CAP Ρ‚Π΅ΠΎΡ€Π΅ΠΌΠ΅

SQL Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

EN

SQL style guide

RU

Руководство ΠΏΠΎ ΡΡ‚ΠΈΠ»ΡŽ SQL

Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊΠΈ

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

EN

RU

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ задания

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

EN

RU

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0