Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…? Π£Ρ‡Π΅Π±Π½ΠΈΠΊ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ²

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ написана Π‘Ρ€ΠΈΡ‚Ρ‚Π½ΠΈ ΠŸΠ°Ρ€ΠΊΠ΅Ρ€, писатСлСм ΠΈΠ· Girls Write Tech, которая спСциализируСтся Π½Π° написании тСхничСских ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ². Они стрСмятся ΠΏΠΎΠ±ΡƒΠ΄ΠΈΡ‚ΡŒ большС ΠΆΠ΅Π½Ρ‰ΠΈΠ½-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ своими знаниями.

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

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

Π’Π½Π΅ΡˆΠ½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡ β€” это столбСц (ΠΈΠ»ΠΈ Π³Ρ€ΡƒΠΏΠΏΠ° столбцов), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² рСляционной Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… для связи Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ. Π‘Π΅Ρ€Π²Π΅Ρ€Ρ‹ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ для ссылки Π½Π° ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

БСгодня это руководство ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ вас с внСшними ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² SQL.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…?

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

Π˜ΡΡ…ΠΎΠ΄Π½Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π° называСтся Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ΠΈΠ»ΠΈ ссылочной Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ, Π° ссылочная Ρ‚Π°Π±Π»ΠΈΡ†Π° с внСшним ΠΊΠ»ΡŽΡ‡ΠΎΠΌ называСтся Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ.

Бсылки Π½Π° внСшниС ΠΊΠ»ΡŽΡ‡ΠΈ хранятся Π² Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈ связаны с ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ†, Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠ°ΠΊ внСшний ΠΊΠ»ΡŽΡ‡, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² связанной Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Π­Ρ‚ΠΎ создаСт ΡΡΡ‹Π»ΠΎΡ‡Π½ΡƒΡŽ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ.

ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ остороТны ΠΏΡ€ΠΈ создании Ρ‚Π°Π±Π»ΠΈΡ† ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ‚Π°Π±Π»ΠΈΡ† (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ вставкС ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· столбца внСшнСго ΠΊΠ»ΡŽΡ‡Π°), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ измСнСния ΠΈΠ»ΠΈ Ρ€Π°Π·Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ связи ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql

Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ customerΠΈ order. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ внСшний ΠΊΠ»ΡŽΡ‡ для создания связи ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. Π’ ordersΡ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΌΡ‹ создаСм ΠΊΠ»ΡŽΡ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ссылаСтся Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (Ρ‚.Π΅. CUSTOMER_ID) Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

Π’ CUSTOMER_IDΡ‚Π°Π±Π»ΠΈΡ†Π΅ Π·Π°ΠΊΠ°Π·ΠΎΠ² становится внСшним ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ссылаСтся Π½Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ запись Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π·Π°ΠΊΠ°Π·ΠΎΠ², Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ внСшнСго ΠΊΠ»ΡŽΡ‡Π°.

Если ΠΌΡ‹ попытаСмся ввСсти CUSTOMER_IDΠ΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², ΠΌΡ‹ Π½Π°Ρ€ΡƒΡˆΠΈΠΌ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ссылочных ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

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

Π’ΠΎΡ‡Π½ΠΎΠ΅ соСдинСниС Π΄Π°Π½Π½Ρ‹Ρ… β€” главная Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°. Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ бСзопасного ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ прилоТСниями зависят ΠΎΡ‚ цСлостности Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ взаимосвязСй с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

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

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ограничСния внСшнСго ΠΊΠ»ΡŽΡ‡Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΡΡΡ‹Π»ΠΎΡ‡Π½ΡƒΡŽ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π½Π°ΡˆΠΈΡ… ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ внСшнСго ΠΊΠ»ΡŽΡ‡Π°. Π•ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ссылочных дСйствий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ограничСния, Π² Ρ‚ΠΎΠΌ числС:

Когда Π΄Π΅Π»ΠΎ Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ имСнования ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ внСшнСго ΠΊΠ»ΡŽΡ‡Π°, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°:

Π’Π½Π΅ΡˆΠ½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡ ΠΏΡ€ΠΎΡ‚ΠΈΠ² ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°

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

Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ большС ΠΊΠ°ΠΊ ссылка, Ρ‡Π΅ΠΌ ΠΊΠ°ΠΊ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ строки ΠΈΠ»ΠΈ записи.

Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈΠ»ΠΈ рСляционной Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡. Для Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ значСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ значСния.

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

Π’Π½Π΅ΡˆΠ½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡ ΠΏΡ€ΠΎΡ‚ΠΈΠ² составного ΠΊΠ»ΡŽΡ‡Π°

БоставныС ΠΊΠ»ΡŽΡ‡ΠΈ Π² рСляционной Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для объСдинСния Π΄Π²ΡƒΡ… ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ столбцов Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅, создавая ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ для этой ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ столбцов.

Π₯отя тСхничСски ΠΊΠ»ΡŽΡ‡-ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ Π² качСствС составного ΠΊΠ»ΡŽΡ‡Π° провСряСт ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, составныС ΠΊΠ»ΡŽΡ‡ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ столбСц ΠΈΠ»ΠΈ столбцы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² сочСтании Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ.

Как ΠΈ внСшниС ΠΊΠ»ΡŽΡ‡ΠΈ, составныС ΠΊΠ»ΡŽΡ‡ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для связывания Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ† Π² рСляционной Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, составныС ΠΊΠ»ΡŽΡ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΏΡ€ΠΈ создании Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† SQL.

БсылочныС дСйствия внСшнСго ΠΊΠ»ΡŽΡ‡Π°

Бсылочная Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ограничиваСтся внСшними ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ, гарантируя, Ρ‡Ρ‚ΠΎ значСния Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ значСниям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

Π­Ρ‚ΠΈ ссылочныС дСйствия ΡƒΡΠΈΠ»ΠΈΠ²Π°ΡŽΡ‚ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ структуры Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, сниТая Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ошибки, гарантируя, Ρ‡Ρ‚ΠΎ ссылочныС столбцы содСрТат Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π½Π°Π±ΠΎΡ€Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ значСния, Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΈΡ… ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‰Π°Ρ‚ΡŒ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ столбца, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ значСния Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ.

Π‘ΠΎΠ²Π΅Ρ‚: ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²ΠΎΠΉ ΠΎΠΏΡ‹Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° использованиС NOT NULLограничСния ΠΏΡ€ΠΈ создании Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ для поддСрТания структурной цСлостности Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

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

Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡ΠΈ β€” Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ Ρ†Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡΡΠ½ΠΎΡΡ‚ΡŒ, ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΈ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ вашСй Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… быстро ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡ΠΈ Π² SQL ΠΈ MySQL

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° синтаксис с использованиСм SQL ΠΈ MySQL. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создаСтся FOREIGN KEY Π² столбцС Β«PersonIDΒ».

Π£Π·Π½Π°ΠΉΡ‚Π΅ большС ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ… Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… здСсь

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис позволяСт Π½Π°ΠΌ Π½Π°Π·Π²Π°Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ FOREIGN KEY:

Π Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ SQL

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΠΌ. НиТС ActorsΡ‚Π°Π±Π»ΠΈΡ†Π° являСтся Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ, ΠΈ называСтся Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ. Π—Π΄Π΅ΡΡŒ справочная Ρ‚Π°Π±Π»ΠΈΡ†Π° DigitalAssetsявляСтся Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ.

ΠœΡ‹ объявляСм столбСц ΠΊΠ°ΠΊ внСшний ΠΊΠ»ΡŽΡ‡ Π² Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли для столбца ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ индСкс. Если столбСц Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ индСкса, Π΅Π³ΠΎ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС внСшнСго ΠΊΠ»ΡŽΡ‡Π°.

Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ измСняСм наш DigitalAssetsΠΈ устанавливаСм ActorIDстолбСц ΠΊΠ°ΠΊ внСшний ΠΊΠ»ΡŽΡ‡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² DigitalAssetsΡ‚Π°Π±Π»ΠΈΡ†Ρƒ строку с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ Π°ΠΊΡ‚Π΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅Ρ‚ Π² ActorsΡ‚Π°Π±Π»ΠΈΡ†Π΅, появится сообщСниС ΠΎΠ± ошибкС:

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ внСшнСго ΠΊΠ»ΡŽΡ‡Π° для самой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. НапримСр, это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Π° сотрудников со столбцом для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Ρ‚Π°ΠΊΠΆΠ΅ являСтся сотрудником, Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ строка, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ Π΅Π³ΠΎ.

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ сотрудника Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ столбцС, Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ сотрудника Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ внСшний ΠΊΠ»ΡŽΡ‡.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Sysadminium

Π‘Π°Π·Π° Π·Π½Π°Π½ΠΈΠΉ систСмного администратора

ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΈ внСшний ΠΊΠ»ΡŽΡ‡ SQL

Из ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΈ внСшний ΠΊΠ»ΡŽΡ‡ Π² SQL. Π—Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹ ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π― ΠΏΠΎΠΊΠ°ΠΆΡƒ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² PostgreSQL.

ВСория

ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ это ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько ΠΏΠΎΠ»Π΅ΠΉ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Он Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ любой строки. ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ограничСния:

К ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»ΡΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅:

ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ:

Π― сам Π½Π΅ имСю большого ΠΎΠΏΡ‹Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с SQL, Π½ΠΎ Π² ΠΊΠ½ΠΈΠ³Π°Ρ… ΠΏΠΈΡˆΡƒΡ‚ Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ СстСствСнный ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡. ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ, я ΠΏΠΎΠΊΠ° ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ смогу.

Бвязь ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ

ΠŸΠ΅Ρ€Π²ΠΎΡΡ‚Π΅ΠΏΠ΅Π½Π½Π°Ρ Π·Π°Π΄Π°Ρ‡Π° ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° – это ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ идСнтификация ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки. Но ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ. Π’ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ связывания Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†. Для Ρ‚Π°ΠΊΠΎΠΉ связи ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΈ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π’ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ† ΡΠΎΠ·Π΄Π°ΡŽΡ‚ внСшний ΠΊΠ»ΡŽΡ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ссылаСтся Π½Π° поля Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Но внСшний ΠΊΠ»ΡŽΡ‡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π»ΡŽΠ±Ρ‹Π΅ поля Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅:

НапримСр, Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Π° β€œΠ£Ρ‡Π΅Π½ΠΈΠΊΠΈβ€ (pupils) ΠΈ выглядит ΠΎΠ½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ЀИО
full_name
Возраст
age
Класс
class
Иванов Иван Π˜Π²Π°Π½ΠΎΠ²ΠΈΡ‡159А
Π‘ΡƒΠΌΠΊΠΈΠ½ Π€Ρ‘Π΄ΠΎΡ€ АндрССвич159А
ΠŸΠ΅Ρ‚Ρ€ΠΎΠ² АлСксСй НиколаСвич148Π‘
Π‘ΡƒΠ»Π³Π°ΠΊΠΎΠ² АлСксандр Π“Π΅Π½Π½Π°Π΄ΡŒΠ΅Π²ΠΈΡ‡148Π‘

Π’Π°Π±Π»ΠΈΡ†Π° pupils

И Π΅ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Π° β€œΠ£ΡΠΏΠ΅Π²Π°Π΅ΠΌΠΎΡΡ‚ΡŒβ€ (evaluations):

ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚
item
ЀИО
full_name
ΠžΡ†Π΅Π½ΠΊΠ°
evaluation
Русский ΡΠ·Ρ‹ΠΊΠ˜Π²Π°Π½ΠΎΠ² Иван Π˜Π²Π°Π½ΠΎΠ²ΠΈΡ‡4
Русский ΡΠ·Ρ‹ΠΊΠŸΠ΅Ρ‚Ρ€ΠΎΠ² АлСксСй НиколаСвич5
ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ°Π‘ΡƒΠ»Π³Π°ΠΊΠΎΠ² АлСксандр Π“Π΅Π½Π½Π°Π΄ΡŒΠ΅Π²ΠΈΡ‡3
Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°Π‘ΡƒΠΌΠΊΠΈΠ½ Π€Ρ‘Π΄ΠΎΡ€ АндрССвич5

Π’Π°Π±Π»ΠΈΡ†Π° evaluations

Π’ ΠΎΠ±ΠΎΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅: ЀИО. ΠŸΡ€ΠΈ этом Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ β€œΠ£ΡΠΏΠ΅Π²Π°Π΅ΠΌΠΎΡΡ‚ΡŒβ€ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ ЀИО, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅Ρ‚ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ β€œ Π£Ρ‡Π΅Π½ΠΈΠΊΠΈβ€œ. Π’Π΅Π΄ΡŒ нСльзя ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡƒΡ‡Π΅Π½ΠΈΠΊΡƒ ΠΎΡ†Π΅Π½ΠΊΡƒ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ сущСствуСт.

ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ Π² нашСм случаС ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅ β€œΠ€Π˜Πžβ€ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ β€œ Π£Ρ‡Π΅Π½ΠΈΠΊΠΈβ€œ. А внСшним ΠΊΠ»ΡŽΡ‡ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ β€œΠ€Π˜Πžβ€ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ β€œΠ£ΡΠΏΠ΅Π²Π°Π΅ΠΌΠΎΡΡ‚ΡŒβ€œ. ΠŸΡ€ΠΈ этом, Ссли ΠΌΡ‹ удаляСм запись ΠΎ ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ ΡƒΡ‡Π΅Π½ΠΈΠΊΠ΅ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ β€œΠ£Ρ‡Π΅Π½ΠΈΠΊΠΈβ€œ, Ρ‚ΠΎ всС Π΅Π³ΠΎ ΠΎΡ†Π΅Π½ΠΊΠΈ Ρ‚ΠΎΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒΡΡ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ β€œΠ£ΡΠΏΠ΅Π²Π°Π΅ΠΌΠΎΡΡ‚ΡŒβ€œ.

Π•Ρ‰Ρ‘ стоит Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π² PostgreSQL автоматичСски создаСт индСкс. ИндСкс ускоряСт доступ ΠΊ строкам Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π΄Π²ΡƒΡ… Π˜Π²Π°Π½ΠΎΠ²Ρ‹Ρ… Иванов Π˜Π²Π°Π½ΠΎΠ²ΠΈΡ‡Π΅ΠΉ Ρƒ нас Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ. Π§Ρ‚ΠΎΠ±Ρ‹ это ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ эти Π΄Π²Π΅ Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠΈ ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ с Π½ΠΈΠΌΠΈ ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… school ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠΌΡΡ ΠΊ Π½Π΅ΠΉ. Π—Π°Ρ‚Π΅ΠΌ создадим Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ pupils. ΠŸΡ€ΠΎ созданиС Ρ‚Π°Π±Π»ΠΈΡ† я ΡƒΠΆΠ΅ писал Ρ‚ΡƒΡ‚, Π° ΠΏΡ€ΠΎ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΡƒΡ‚. Π—Π°Ρ‚Π΅ΠΌ посмотрим Π½Π° Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ \d:

Как Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ создаётся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ конструкции PRIMARY KEY (имя_поля) Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ создания Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Π’Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ \d Π½Π°ΠΌ ΠΏΠΎΠΊΠ°Π·Π°Π», Ρ‡Ρ‚ΠΎ Ρƒ нас Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡. А Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ сдСлал Π΄Π²Π° ограничСния:

ИндСкс Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π°Π»ΠΎΠΆΠΈΠ» Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ – записи Π² ΠΏΠΎΠ»Π΅ full_name Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом создадим Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ evaluations:

Π’ этом случаС ΠΈΠ· Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ \d Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ создался внСшний ΠΊΠ»ΡŽΡ‡ (Foreign-key), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ относится ΠΊ полю full_name ΠΈ ссылаСтся Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ pupils.

Π’Π½Π΅ΡˆΠ½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡ создаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ конструкции FOREIGN KEY (имя_поля) REFERENCES Ρ‚Π°Π±Π»ΠΈΡ†Π°_Π½Π°_ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ_ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ.

Боздавая внСшний ΠΊΠ»ΡŽΡ‡ ΠΌΡ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Π»ΠΈ ΠΎΠΏΡ†ΠΈΡŽ ON DELETE CASCADE. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ строки с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠΌ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ pupils, всС строки связанныС с этим ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠΌ удалятся ΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ evaluations автоматичСски.

Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с Π½ΠΈΠΌΠΈ

Π—Π°ΠΏΠΎΠ»Π½ΠΈΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ β€œpupilsβ€œ:

Π—Π°ΠΏΠΎΠ»Π½ΠΈΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ β€œevaluationsβ€œ:

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΡ†Π΅Π½ΠΊΡƒ Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΡƒΡ‡Π΅Π½ΠΈΠΊΡƒ:

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π’ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ (insert) ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ (update) Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ evaluations, Π² ΠΏΠΎΠ»Π΅ full_name ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ Π² этом ΠΆΠ΅ ΠΏΠΎΠ»Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ pupils.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠ΄Π°Π»ΠΈΠΌ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΡƒΡ‡Π΅Π½ΠΈΠΊΠ° ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ pupils:

И посмотрим Π½Π° строки Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ evaluations:

Как Π²ΠΈΠ΄Π½ΠΎ, строка с full_name равная β€˜Π˜Π²Π°Π½ΠΎΠ² Иван Π˜Π²Π°Π½ΠΎΠ²ΠΈΡ‡β€™ Ρ‚ΠΎΠΆΠ΅ ΡƒΠ΄Π°Π»ΠΈΠ»Π°ΡΡŒ. Если Π±Ρ‹ Ρƒ Иванова Π±Ρ‹Π»ΠΎ Π±Ρ‹ большС ΠΎΡ†Π΅Π½ΠΎΠΊ, ΠΎΠ½ΠΈ всё Ρ€Π°Π²Π½ΠΎ Π±Ρ‹ всС ΡƒΠ΄Π°Π»ΠΈΠ»ΠΈΡΡŒ. Π—Π° это, Ссли ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ опция ON DELETE CASCADE.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡƒΡ‡Π΅Π½ΠΈΠΊΠ° с Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ-ΠΆΠ΅ ЀИО, ΠΊΠ°ΠΊ Ρƒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ…:

НичСго Π½Π΅ Π²Ρ‹ΡˆΠ»ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ такая запись ΡƒΠΆΠ΅ сущСствуСт Π² ΠΏΠΎΠ»Π΅ full_name, Π° это ΠΏΠΎΠ»Π΅ Ρƒ нас ΠΈΠΌΠ΅Π΅Ρ‚ индСкс. Π—Π½Π°Ρ‡ΠΈΡ‚ значСния Π² Π½Ρ‘ΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅.

Боставной ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡

Π•ΡΡ‚ΡŒ большая Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ школС Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Π΄Π²Π° ΡƒΡ‡Π΅Π½ΠΈΠΊΠ° с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ЀИО. Но мСньшС вСроятности Ρ‡Ρ‚ΠΎ эти Π΄Π²Π° ΡƒΡ‡Π΅Π½ΠΈΠΊΠ° Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ классС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² качСствС ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π·ΡΡ‚ΡŒ Π΄Π²Π° поля, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ full_name ΠΈ class.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΠΌ наши Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠΈ ΠΈ создадим ΠΈΡ… Π·Π°Π½ΠΎΠ²ΠΎ, Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ создадим ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ составной ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡:

Как Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ€Π°Π·Π½ΠΈΡ†Π° Π½Π΅ большая. ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π² PRIMARY KEY ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Π²Π° поля вмСсто ΠΎΠ΄Π½ΠΎΠ³ΠΎ. И Π² FOREIGN KEY Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Π²Π° поля вмСсто ΠΎΠ΄Π½ΠΎΠ³ΠΎ. Ну ΠΈ Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ evaluations ΠΏΡ€ΠΈ создании Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅ class, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΅Π³ΠΎ Ρ‚Π°ΠΌ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Π½Π΅ Π±Ρ‹Π»ΠΎ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим Π½Π° структуры этих Ρ‚Π°Π±Π»ΠΈΡ†:

ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ pupils ΡƒΠΆΠ΅ состоит ΠΈΠ· Π΄Π²ΡƒΡ… ΠΏΠΎΠ»Π΅ΠΉ, поэтому внСшний ΠΊΠ»ΡŽΡ‡ ссылаСтся Π½Π° эти Π΄Π²Π° поля.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ² с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ЀИО Π²Π±ΠΈΡ‚ΡŒ Π² Π½Π°ΡˆΡƒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ ΠΏΡ€ΠΈ условии Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Π² Ρ€Π°Π·Π½Ρ‹Ρ… классах:

И Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅:

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†

ΠšΡΡ‚Π°Ρ‚ΠΈ, ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ссылаСтся другая Ρ‚Π°Π±Π»ΠΈΡ†Π° Π²Ρ‹ Π½Π΅ смоТСтС:

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΡƒΠ΄Π°Π»ΠΈΠΌ наши Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ порядкС:

Π›ΠΈΠ±ΠΎ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ каскадно Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ pupils вмСстС с внСшним ΠΊΠ»ΡŽΡ‡ΠΎΠΌ Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ evaluations:

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, послС каскадного удалСния Ρƒ нас вмСстС с Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ pupils удался внСшний ΠΊΠ»ΡŽΡ‡ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ evaluations.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ связи Π² ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…

Π’Ρ‹ΡˆΠ΅ я постоянно создавал ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΈ внСшний ΠΊΠ»ΡŽΡ‡ΠΈ ΠΏΡ€ΠΈ создании Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Но ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ для ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†.

Π’Π½Π°Ρ‡Π°Π»Π΅ ΡƒΠ΄Π°Π»ΠΈΠΌ ΠΎΡΡ‚Π°Π²ΡˆΡƒΡŽΡΡ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ:

И сдСлаСм Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±Π΅Π· ΠΊΠ»ΡŽΡ‡Π΅ΠΉ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ создадим ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ pupils:

И создадим внСшний ΠΊΠ»ΡŽΡ‡ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ evaluations:

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Ρ‡Ρ‚ΠΎ Ρƒ нас ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ:

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

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΈ внСшний ΠΊΠ»ΡŽΡ‡ sql ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚ΡƒΡ‚.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π’Π·Π°ΠΈΠΌΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ внСшниС ΠΊΠ»ΡŽΡ‡ΠΈ Π² SQL Server

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

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

Π‘ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹: Department (ΠžΡ‚Π΄Π΅Π») ΠΈ Employee (Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ). Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ† DepId Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Employee ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ внСшний ΠΊΠ»ΡŽΡ‡, поэтому значСния этого столбца Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒΡΡ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² столбцС DepartmentId Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Department.

Π§Ρ‚ΠΎ происходит Π·Π° кулисами INSERT

Π˜ΡΡΠ»Π΅Π΄ΡƒΠ΅ΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ вставкС Π΄Π°Π½Π½Ρ‹Ρ… Π² Π΄ΠΎΡ‡Π΅Ρ€Π½ΡŽΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ (Employee).

Π‘Π½Π°Ρ‡Π°Π»Π° вставим строку Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ (Department).

ΠŸΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ запроса Π²ΠΊΠ»ΡŽΡ‡ΠΈΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ фактичСского ΠΏΠ»Π°Π½Π° выполнСния ΠΈ вставим строку Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Employee (Π΄ΠΎΡ‡Π΅Ρ€Π½ΡŽΡŽ).

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql

Clustered Index Insert вставляСт Π΄Π°Π½Π½Ρ‹Π΅ Π² кластСрный индСкс, Π° Ρ‚Π°ΠΊΠΆΠ΅ обновляСт нСкластСрныС индСксы. Если Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° этот ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ для Π½Π΅Π³ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° этого ΠΊΠ°ΠΊ Ρ€Π°Π· Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ вставкС Π΄Π°Π½Π½Ρ‹Ρ… Π² кластСрный индСкс Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Employee, эти Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² нСкластСрный индСкс. Π­Ρ‚ΠΈ Π΄Π²Π° индСкса ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π²ΠΎ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ подсказкС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Clustered Index Insert.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql

Clustered Index Seek провСряСт сущСствованиС значСния внСшнСго ΠΊΠ»ΡŽΡ‡Π° Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

Nested Loops сравниваСт вставлСнныС значСния Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ со значСниями, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Clustered Index Seek. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ этого сравнСния Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ получаСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, сущСствуСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

Assert ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Nested Loops. Если Nested Loops Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ NULL, Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Assert Π±ΡƒΠ΄Π΅Ρ‚ ноль, ΠΈ запрос Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС опСрация INSERT выполнится ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql

Π’Π·Π°ΠΈΠΌΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ

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

ПослС этого создадим Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, которая ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ со вставкой строк Π² Employee.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ запросы Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ Π² Ρ€Π°Π·Π½Ρ‹Ρ… сСссиях. Π‘Π½Π°Ρ‡Π°Π»Π° «Π§Π°ΡΡ‚ΡŒ 1» ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ запроса:

И ΠΏΠ΅Ρ€Π²ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ запроса:

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ β€” Π²Ρ‚ΠΎΡ€Ρ‹Π΅ части запросов.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° взаимная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ:

ΠŸΠ΅Ρ€Π²Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ Запроса-1 ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ ΠΈ вставляСт строку Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Department. Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° Π΄Π°Π½Π½Ρ‹Ρ… Department блокируСтся монопольной Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ намСрСния (IX, intent exclusive lock), Π° вставлСнная строка β€” монопольной Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ (X, exclusive lock).

ΠŸΠ΅Ρ€Π²Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ Запроса-2 Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ ΠΈ вставляСт строку Π² Department. Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Department блокируСтся монопольной Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ намСрСния (IX), Π° вставлСнная строка β€” монопольной Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ (X). На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ Π½Π΅Ρ‚.

Вторая Ρ‡Π°ΡΡ‚ΡŒ Запроса-1, ΠΎΠ½ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Department для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ссылочной цСлостности вставлСнных строк. Однако ΠΎΠ΄Π½Π° ΠΈΠ· строк Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π° монопольной Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ Π² ЗапросС-2. Π’ этом случаС Запрос-1 Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Запроса-2.

Запрос-2 блокируСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ строки, вставлСнныС Π² Department Π² ЗапросС-1. Π£ нас ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ взаимная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ Π³Ρ€Π°Ρ„ Π²Π·Π°ΠΈΠΌΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎ, ΠΎ Ρ‡Π΅ΠΌ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ. БСссия 71 (Запрос-1) ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡŒΠ½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ (X) для строк Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Employee ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ (S) для строк Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Department. Π’ это ΠΆΠ΅ врСмя сСссия 51 ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ (X) для строк Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Department ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡŒΠ½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ (X) для строк Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Employee. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя сСссиями Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π±ΠΎΡ€ΡŒΠ±Π° Π·Π° рСсурсы, ΠΈ SQL Server Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ ΠΈΠ· сСссий.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql

УстранСниС Π²Π·Π°ΠΈΠΌΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ

ΠœΡ‹ с Π²Π°ΠΌΠΈ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ массовых INSERT ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° цСлостности внСшнСго ΠΊΠ»ΡŽΡ‡Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ с Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ. На самом Π΄Π΅Π»Π΅ эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° связана с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Взглянув Π½Π° ΠΏΠ»Π°Π½ выполнСния Π²Ρ‚ΠΎΡ€ΠΎΠΉ части запросов, ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Merge Join.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql

Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Merge Join являСтся самым эффСктивным, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ сортировки Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Π’ нашСм случаС ΠΏΡ€ΠΈ сканировании Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Merge Join сталкиваСтся с Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ строкой, ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ сканированиС, ΠΏΠΎΠΊΠ° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ снята.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ OPTION (LOOP JOIN). ΠŸΡ€ΠΈ использовании Ρ…ΠΈΠ½Ρ‚Π° LOOP JOIN, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов SQL Server сгСнСрируСт Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ»Π°Π½ выполнСния ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Merge Join ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Nested Loops, Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Clustered Index Scan Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Clustered Index Seek. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Clustered Index Seek доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ осущСствляСтся Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, поэтому Π½Π΅ трСбуСтся ΠΆΠ΄Π°Ρ‚ΡŒ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… строк. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Nested Loops выполняСт построчноС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, Π° Merge Join β€” ΠΎΠ΄Π½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΈ Π΄Π²Π° измСнСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΡΠ½ΠΈΠΆΠ°ΡŽΡ‚ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ запроса ΠΈΠ·-Π·Π° наличия Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql

Row Count Spool ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для подсчСта количСства строк, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Clustered Index Seek, ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ этой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Nested Loops. Π­Ρ‚ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ запросов SQL Server для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ сущСствования строк, Π½ΠΎ Π½Π΅ содСрТащихся Π² Π½ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ….

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

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

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… курса Β«MS SQL Server DeveloperΒ». ВсСх ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ°Π΅ΠΌ Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΡƒΡ€ΠΎΠΊ Β«SQL Server ΠΈ DockerΒ». На ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ рассмотрим Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ SQL Server Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ….

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

SQL ΠΊΠ»ΡŽΡ‡ΠΈ Π²ΠΎ всСх подробностях

Π’ Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ ΠΏΠΎΠ»Π½ΠΎ догматичСских Π·Π°ΠΏΠΎΠ²Π΅Π΄Π΅ΠΉ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ Π² рСляционных Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Иногда споры Π΄Π°ΠΆΠ΅ пСрСходят Π² Ρ…ΠΎΠ»ΠΈΠ²Π°Ρ€Ρ‹: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ СстСствСнныС ΠΈΠ»ΠΈ искусствСнныС ΠΊΠ»ΡŽΡ‡ΠΈ? АвтоинкрСмСнтныС Ρ†Π΅Π»Ρ‹Π΅ ΠΈΠ»ΠΈ UUID?

ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Π² ΡˆΠ΅ΡΡ‚ΡŒΠ΄Π΅ΡΡΡ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ, пролистав Ρ€Π°Π·Π΄Π΅Π»Ρ‹ пяти ΠΊΠ½ΠΈΠ³ ΠΈ Π·Π°Π΄Π°Π² ΠΊΡƒΡ‡Ρƒ вопросов Π² IRC ΠΈ StackOverflow, я (Π°Π²Ρ‚ΠΎΡ€ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ Joe Β«begriffsΒ» Nelson), ΠΊΠ°ΠΊ ΠΌΠ½Π΅ каТСтся, собрал куски ΠΏΠ°Π·Π·Π»Π° Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ смогу ΠΏΡ€ΠΈΠΌΠΈΡ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠ². МногиС споры ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚, Π½Π° самом Π΄Π΅Π»Π΅, ΠΈΠ·-Π·Π° Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ понимания Ρ‡ΡƒΠΆΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π§Ρ‚ΠΎ ΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ Β«ΠΊΠ»ΡŽΡ‡ΠΈΒ»?

Π—Π°Π±ΡƒΠ΄Π΅ΠΌ Π½Π° ΠΌΠΈΠ½ΡƒΡ‚Ρƒ ΠΎ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π°Ρ…, нас интСрСсуСт Π±ΠΎΠ»Π΅Π΅ общая идСя. ΠšΠ»ΡŽΡ‡ β€” это ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° (column) ΠΈΠ»ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Π² строках Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΎΠ΅ подмноТСство ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ Π½Π΅ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ.

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ для подсчёта ΠΊΠ°Ρ€Ρ‚ Π² ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ³Ρ€Π΅:

Если ΠΌΡ‹ отслСТиваСм ΠΎΠ΄Π½Ρƒ ΠΊΠΎΠ»ΠΎΠ΄Ρƒ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π±Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ ΠΊΠ°Ρ€Ρ‚), Ρ‚ΠΎ сочСтаниС Ρ€ΡƒΠ±Π°ΡˆΠΊΠΈ ΠΈ Π»ΠΈΡ†Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ ΠΈ Π½Π°ΠΌ Π±Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π²Π½ΠΎΡΠΈΡ‚ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ€ΡƒΠ±Π°ΡˆΠΊΡƒ ΠΈ Π»ΠΈΡ†ΠΎ Π΄Π²Π°ΠΆΠ΄Ρ‹, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎ. Если ΠΊΠ°Ρ€Ρ‚Π° Π΅ΡΡ‚ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, Ρ‚ΠΎ ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π΅Ρ‘, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС β€” Π½Π΅ Π²ΠΈΠ΄Π΅Π»ΠΈ.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π‘Π°ΠΌΠΈ ΠΏΠΎ сСбС Π½ΠΈ suit (Ρ€ΡƒΠ±Π°ΡˆΠΊΠ°), Π½ΠΈ face (Π»ΠΈΡ†ΠΎ) Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠ°Ρ€Ρ‚Ρ‹ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ Ρ€ΡƒΠ±Π°ΡˆΠΊΠΎΠΉ ΠΈΠ»ΠΈ Π»ΠΈΡ†ΠΎΠΌ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ (suit, face) ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ, Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Π½Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΡ… сочСтаниС Π½Π΅ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌΠΎ, Π° (suit, face) являСтся ΠΊΠ»ΡŽΡ‡ΠΎΠΌ.

Π’ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰Π΅ΠΉ ситуации, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ нСсколько ΠΊΠΎΠ»ΠΎΠ΄ ΠΊΠ°Ρ€Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ сколько Ρ€Π°Π· ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΊΠ°Ρ€Ρ‚Ρƒ:

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

Π’ PostgreSQL ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ способом добавлСния ограничСния ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ являСтся Π΅Π³ΠΎ прямоС объявлСниС, ΠΊΠ°ΠΊ Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. ИспользованиС индСксов для соблюдСния ограничСния ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ понадобится Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… случаях, Π½ΠΎ Π½Π΅ стоит ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π½ΠΈΠΌ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. НСт нСобходимости Π² Ρ€ΡƒΡ‡Π½ΠΎΠΌ создании индСксов для ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ, ΡƒΠΆΠ΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ; Ρ‚Π°ΠΊΠΈΠ΅ дСйствия Π±ΡƒΠ΄ΡƒΡ‚ просто Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ автоматичСскоС созданиС индСкса.

Π’Π°ΠΊΠΆΠ΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, ΠΈ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΈΡ… всС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΠΈΡ… ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

Π’ΠΎΡ‚ Π΄Π²Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Ρ‚Π°Π±Π»ΠΈΡ† с нСсколькими ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ.

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

Π›ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΉ случай ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ

Π’ΠΎ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ Π½Π°Π·Π²Π°Π»ΠΈ просто Β«ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈΒ», ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ называСтся Β«ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈΒ» (candidate keys). Π’Π΅Ρ€ΠΌΠΈΠ½ Β«candidateΒ» ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всС Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‚ Π·Π° ΠΏΠΎΡ‡Ρ‘Ρ‚Π½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Β«ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°Β» (primary key), Π° ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ Π½Π°Π·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ Β«Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈΒ» (alternate keys).

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

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

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

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΠ»ΠΈΡΡŒ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΆΠΈΡ‚ΠΎΠΊ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ³ΠΎ, ΠΈ Π΅Π΄Π²Π° Π»ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ отраТСния ΠΈΠ»ΠΈ опрСдСлСния физичСского располоТСния. НапримСр, Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ PostgreSQL объявлСниС ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° автоматичСски Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ NOT NULL ΠΈ опрСдСляСт внСшний ΠΊΠ»ΡŽΡ‡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ столбцами для ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° JOIN.

ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π½Π΅ отмСняСт возмоТности объявлСния ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя, Ссли Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΡŽΡ‡ Π½Π΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ, Ρ‚ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π° всС Ρ€Π°Π²Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Молния, Π²ΠΎ всяком случаС, Π² вас Π½Π΅ ΡƒΠ΄Π°Ρ€ΠΈΡ‚.

НахоТдСниС СстСствСнных ΠΊΠ»ΡŽΡ‡Π΅ΠΉ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql

РассмотрСнныС Π²Ρ‹ΡˆΠ΅ ΠΊΠ»ΡŽΡ‡ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ «СстСствСнными», ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ свойствами ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° интСрСсными сами ΠΏΠΎ сСбС, Π΄Π°ΠΆΠ΅ Ссли Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ стрСмится ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ· Π½ΠΈΡ… ΠΊΠ»ΡŽΡ‡.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ стоит ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ исслСдовании Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… СстСствСнных ΠΊΠ»ΡŽΡ‡Π΅ΠΉ β€” Π½ΡƒΠΆΠ½ΠΎ ΡΡ‚Π°Ρ€Π°Ρ‚ΡŒΡΡ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΡƒΠ΄Ρ€ΠΈΡ‚ΡŒ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ sqlvogel Π½Π° StackExchange Π΄Π°Ρ‘Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ совСт:

Π£ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… людСй Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ слоТности с Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ «СстСствСнного» ΠΊΠ»ΡŽΡ‡Π° ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°ΡŽΡ‚ гипотСтичСскиС ситуации, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ. Они Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ самого смысла Π·Π°Π΄Π°Ρ‡ΠΈ. Бмысл ΠΊΠ»ΡŽΡ‡Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈ всСгда Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Π’Π°Π±Π»ΠΈΡ†Π° содСрТит Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌΠΎΠΌ контСкстС (Π² Β«ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области» ΠΈΠ»ΠΈ Π² «области дискурса») ΠΈ СдинствСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ограничСния Π² этой ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ области.

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

НапримСр, Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π»Π΅Π½ΠΎΠ² Ρ…ΠΎΠ±Π±ΠΈ-ΠΊΠ»ΡƒΠ±Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² Π΄Π²ΡƒΡ… ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°Ρ… β€” first_name, last_name. ΠŸΡ€ΠΈ нСбольшом ΠΎΠ±ΡŠΡ‘ΠΌΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹ маловСроятны, ΠΈ Π΄ΠΎ возникновСния Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ»ΡŽΡ‡ Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ.

Π‘ ростом Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡŠΡ‘ΠΌΠ° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π²Ρ‹Π±ΠΎΡ€ СстСствСнного ΠΊΠ»ΡŽΡ‡Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ слоТнСС. Π₯Ρ€Π°Π½ΠΈΠΌΡ‹Π΅ Π½Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ΠΌ внСшнСй Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΈ Π½Π΅ содСрТат Π² сСбС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ аспСкты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² ΠΌΠΈΡ€Π΅, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹. Если Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° отсутствуСт ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ΄, Ρ‚ΠΎ ΠΊΠ°ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π΄Π²Π΅ Π±Π°Π½ΠΊΠΈ с Π½Π°ΠΏΠΈΡ‚ΠΊΠΎΠΌ ΠΈΠ»ΠΈ Π΄Π²Π΅ ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ с овсянкой, ΠΊΡ€ΠΎΠΌΠ΅ ΠΊΠ°ΠΊ ΠΏΠΎ ΠΈΡ… Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π² пространствС ΠΈΠ»ΠΈ ΠΏΠΎ нСбольшим различиям Π² вСсС ΠΈΠ»ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ΅?

ИмСнно поэтому ΠΎΡ€Π³Π°Π½Ρ‹ стандартизации ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΈ наносят Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΡŽ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ. На автомобилях ΡˆΡ‚Π°ΠΌΠΏΡƒΠ΅Ρ‚ΡΡ Vehicle Identification Number (VIN), Π² ΠΊΠ½ΠΈΠ³Π°Ρ… пСчатаСтся ISBN, Π½Π° ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ΅ ΠΏΠΈΡ‰Π΅Π²Ρ‹Ρ… Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² Π΅ΡΡ‚ΡŒ UPC. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΠ·Ρ€Π°Π·ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ эти числа Π½Π΅ каТутся СстСствСнными. Π’Π°ΠΊ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ я Π½Π°Π·Ρ‹Π²Π°ΡŽ ΠΈΡ… СстСствСнными ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ?

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

Π˜ΡΠΊΡƒΡΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql

Π‘ ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡ – это ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°, Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ находятся ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния, ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· способов Π΅Π³ΠΎ создания являСтся ΠΆΡƒΠ»ΡŒΠ½ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ – Π² ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²Ρ‹Π΄ΡƒΠΌΠ°Π½Π½Ρ‹Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния. Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ искусствСнныС ΠΊΠ»ΡŽΡ‡ΠΈ: ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для ссылки Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

ΠžΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ гСнСрируСтся ΠΈΠ· самой Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ нСизвСстСн Π½ΠΈΠΊΠΎΠΌΡƒ, ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. ИмСнно это ΠΎΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ искусствСнныС ΠΊΠ»ΡŽΡ‡ΠΈ ΠΎΡ‚ стандартизированных СстСствСнных ΠΊΠ»ΡŽΡ‡Π΅ΠΉ.

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

Π‘ΡƒΡ€Ρ€ΠΎΠ³Π°Ρ‚Ρ‹

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

НС ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ суррогатами искусствСнныС ΠΊΠ»ΡŽΡ‡ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ для ссылок Π½Π° строку снаруТи Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π˜ΡΠΊΡƒΡΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚: ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ ΠΊΠ°ΠΊ URL, ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Ρ‘Π½ ΠΊ счёту, ΠΏΡ€ΠΎΠ΄ΠΈΠΊΡ‚ΠΎΠ²Π°Π½ ΠΏΠΎ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Ρƒ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ Π² Π±Π°Π½ΠΊΠ΅ ΠΈΠ»ΠΈ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ Π½Π° Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΌ Π·Π½Π°ΠΊΠ΅. (НомСрной Π·Π½Π°ΠΊ автомобиля для нас являСтся СстСствСнным ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ государством ΠΊΠ°ΠΊ искусствСнный ΠΊΠ»ΡŽΡ‡.)

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

Π­Ρ‚Π° функция являСтся ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ самой сСбС (Ρ‚.Π΅. pseudo_encrypt(pseudo_encrypt(x)) = x ). Π’ΠΎΡ‡Π½ΠΎΠ΅ воспроизвСдСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ являСтся своСго Ρ€ΠΎΠ΄Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ Ρ‡Π΅Ρ€Π΅Π· Π½Π΅ΡΡΠ½ΠΎΡΡ‚ΡŒ, ΠΈ Ссли ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ догадаСтся, Ρ‡Ρ‚ΠΎ Π²Ρ‹ использовали ΡΠ΅Ρ‚ΡŒ ЀСйстСля ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ PostgreSQL, Ρ‚ΠΎ Π΅ΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Однако вмСсто (((1366 * r1 + 150889) % 714025) / 714025.0) ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΡ‚ 0 Π΄ΠΎ 1, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, просто ΠΏΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с числами Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ.

Π’ΠΎΡ‚, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ pseudo_encrypt:

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ для short_id использовались Ρ†Π΅Π»Ρ‹Π΅ значСния ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, для bigint Π΅ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ЀСйстСля, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ XTEA.

Π•Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ способ Π·Π°ΠΏΡƒΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ†Π΅Π»Ρ‹Ρ… чисСл Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ Π΅Ρ‘ Π² ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ строки. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ pg_hashids:

Π—Π΄Π΅ΡΡŒ снова Π±ΡƒΠ΄Π΅Ρ‚ быстрСС Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ сами Ρ†Π΅Π»Ρ‹Π΅ числа ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΠΎ запросу, Π½ΠΎ Π·Π°ΠΌΠ΅Ρ€ΡŒΡ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ посмотритС, ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈ это смысл Π½Π° самом Π΄Π΅Π»Π΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ρ‡Ρ‘Ρ‚ΠΊΠΎ Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ² смысл искусствСнных ΠΈ СстСствСнных ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ споры «СстСствСнныС ΠΏΡ€ΠΎΡ‚ΠΈΠ² искусствСнных» ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΎΠΆΠ½ΠΎΠΉ Π΄ΠΈΡ…ΠΎΡ‚ΠΎΠΌΠΈΠ΅ΠΉ. Π˜ΡΠΊΡƒΡΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ ΠΈ СстСствСнныС ΠΊΠ»ΡŽΡ‡ΠΈ Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°! Π’ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ Ρ‚Π΅, ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. На самом Π΄Π΅Π»Π΅, Ρ‚Π°Π±Π»ΠΈΡ†Π° с искусствСнным ΠΊΠ»ΡŽΡ‡ΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ СстСствСнный ΠΊΠ»ΡŽΡ‡, Π·Π° Ρ€Π΅Π΄ΠΊΠΈΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ сущСствуСт СстСствСнного ΠΊΠ»ΡŽΡ‡Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΊΠΎΠ΄ΠΎΠ² ΠΊΡƒΠΏΠΎΠ½ΠΎΠ²):

Если Ρƒ вас Π΅ΡΡ‚ΡŒ искусствСнный ΠΊΠ»ΡŽΡ‡ ΠΈ Π²Ρ‹ Π½Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚Π΅ СстСствСнныС ΠΊΠ»ΡŽΡ‡ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚, Ρ‚ΠΎ оставляСтС послСдниС Π½Π΅Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹ΠΌΠΈ:

ЕдинствСнным Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΏΡ€ΠΎΡ‚ΠΈΠ² объявлСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ нСсёт Π·Π° собой Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ индСкс ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° запись Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, насколько Π²Π°ΠΌ Π²Π°ΠΆΠ½Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ, скорСС всСго, ΠΊΠ»ΡŽΡ‡ΠΈ всС ΠΆΠ΅ стоит ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ.

Π’Π°ΠΊΠΆΠ΅ стоит ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ нСсколько искусствСнных ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Ссли ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ. НапримСр, Ρƒ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΅ΡΡ‚ΡŒ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Ρ‹ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ (Applicants) ΠΈ сотрудники (Employees). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ сотрудник ΠΊΠΎΠ³Π΄Π°-Ρ‚ΠΎ Π±Ρ‹Π» ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ΠΎΠΌ, ΠΈ относится ΠΊ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Π°ΠΌ ΠΏΠΎ своСму собствСнному ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ сотрудника. Π•Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ сотрудника ΠΈ имя Π»ΠΎΠ³ΠΈΠ½Π° ΠΊΠ°ΠΊ Π΄Π²Π° ΠΊΠ»ΡŽΡ‡Π° Π² Employees.

Π‘ΡƒΡ€Ρ€ΠΎΠ³Π°Ρ‚Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql

Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ, Π²Π°ΠΆΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ искусствСнного ΠΊΠ»ΡŽΡ‡Π° называСтся «суррогатный ΠΊΠ»ΡŽΡ‡Β». Он Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΌ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΌ, ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ искусствСнныС ΠΊΠ»ΡŽΡ‡ΠΈ, Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ внутрСнняя ΠΌΠ΅Ρ‚ΠΊΠ°, всСгда ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ строку. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² SQL, Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ обращаСтся ΠΊ Π½Π΅ΠΌΡƒ явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Если Π²Π°ΠΌ Π·Π½Π°ΠΊΠΎΠΌΡ‹ систСмныС ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ (system columns) ΠΈΠ· PostgreSQL, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ суррогаты ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… (Π²Ρ€ΠΎΠ΄Π΅ ctid), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ΄Π½Π°ΠΊΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ мСняСтся. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ суррогата выбираСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ измСняСтся.

НС Π΄Π΅Π»Π°ΠΉΡ‚Π΅ суррогатныС ΠΊΠ»ΡŽΡ‡ΠΈ «СстСствСнными». Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ суррогатного ΠΊΠ»ΡŽΡ‡Π° ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Ρ…ΡƒΠΆΠ΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚Π΅ ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с этим Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ (Π² частности Ρ‡Π΅Ρ€Π΅Π· поиск), Ρ‚ΠΎ фактичСски ΠΏΡ€ΠΈΠ΄Π°Π΄ΠΈΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Ρƒ Π·Π½Π°Ρ‡ΠΈΠΌΠΎΡΡ‚ΡŒ. ΠŸΠΎΡ‚ΠΎΠΌ ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΈΠ· вашСй Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ СстСствСнным ΠΊΠ»ΡŽΡ‡ΠΎΠΌ Π² Ρ‡ΡŒΠ΅ΠΉ-Ρ‚ΠΎ Ρ‡ΡƒΠΆΠΎΠΉ Π‘Π”.

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

АвтоинкрСмСнтныС bigint

Однако, я ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ Π°Π²Ρ‚ΠΎΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ ΠΏΠ»ΠΎΡ…ΠΎΠΉ Π²Ρ‹Π±ΠΎΡ€ для суррогатных ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. Π’Π°ΠΊΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅ нСпопулярно, поэтому ΠΏΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΌΠ½Π΅ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒΡΡ.

НСдостатки ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ:

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: использованиС Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ†Π΅Π»Ρ‹Ρ… чисСл (128-Π±ΠΈΡ‚Π½Ρ‹Ρ…), Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Π² соотвСтствии со случайным шаблоном. Алгоритмы Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΈΡ… ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² (universally unique identifier, UUID) ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ ΠΌΠ°Π»ΡƒΡŽ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ значСния Π΄Π²Π°ΠΆΠ΄Ρ‹, Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π½Π° Π΄Π²ΡƒΡ… Ρ€Π°Π·Π½Ρ‹Ρ… процСссорах.

Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС, UUID каТутся СстСствСнным Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ для использования Π² качСствС суррогатных ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Π½Π΅ ΠΏΡ€Π°Π²Π΄Π° Π»ΠΈ? Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ строки ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‚ΠΎ Π½ΠΈΡ‡Ρ‚ΠΎ Π½Π΅ сравнится с ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ!

Π’Π°ΠΊ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ всС Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΈΠΌΠΈ Π² PostgreSQL? На это Π΅ΡΡ‚ΡŒ нСсколько Π½Π°Π΄ΡƒΠΌΠ°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ΠΈ ΠΎΠ΄Π½Π° логичная, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ, ΠΈ я ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡŽ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ своС ΠΌΠ½Π΅Π½ΠΈΠ΅.

Для Π½Π°Ρ‡Π°Π»Π°, расскаТу ΠΎ Π½Π°Π΄ΡƒΠΌΠ°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ…. НСкоторыС люди Π΄ΡƒΠΌΠ°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ UUID β€” это строки, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΌ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ с дСфисом: 5bd68e64-ff52-4f54-ace4-3cd9161c8b7f. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΠ³ΠΎ (128-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ) Ρ‚ΠΈΠΏΠ° uuid, Π½ΠΎ Π² PostgreSQL ΠΎΠ½ Π΅ΡΡ‚ΡŒ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄Π²ΡƒΡ… bigint, Ρ‚.Π΅., ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΎΠ±ΡŠΡ‘ΠΌΠΎΠΌ ΠΏΡ€ΠΎΡ‡Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹.

Π•Ρ‰Ρ‘ UUID нСзаслуТСнно обвиняСтся Π² громоздкости, Π½ΠΎ ΠΊΡ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π½ΠΎΡΠΈΡ‚ΡŒ, ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ? ΠœΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ это ΠΈΠΌΠ΅Π΅Ρ‚ смысл для ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… искусствСнных ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Π½ΠΎ Π½ΠΈΠΊΡ‚ΠΎ (ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ) Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ суррогатный UUID. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, с UUID Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ SQL Π² psql для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ систСмы, Π½ΠΎ Π½Π° этом всё. А Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° строки ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Ссли ΠΎΠ½ΠΈ Π·Π°Π΄Π°Π½Ρ‹.

РСальная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с UUID Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ сильно Ρ€Π°Π½Π΄ΠΎΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ значСния приводят ΠΊ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ ΠΎΠ±ΡŠΡ‘ΠΌΠ° записи (write amplification) ΠΈΠ·-Π·Π° записСй ΠΏΠΎΠ»Π½Ρ‹Ρ… страниц Π² ΠΆΡƒΡ€Π½Π°Π» с ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π΅ΠΉ записью (write-ahead log, WAL). Однако, Π½Π° самом Π΄Π΅Π»Π΅ сниТСниС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ зависит ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ UUID.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠΌ write amplification. По ΠΏΡ€Π°Π²Π΄Π΅ говоря, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² старых Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСмах. Когда PostgreSQL выполняСт запись Π½Π° диск, ΠΎΠ½Π° измСняСт «страницу» Π½Π° дискС. ΠŸΡ€ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ питания ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм всё Ρ€Π°Π²Π½ΠΎ сообщит ΠΎΠ± ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ записи Π΅Ρ‰Ρ‘ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹Π΅ бСзопасно ΡΠΎΡ…Ρ€Π°Π½ΠΈΠ»ΠΈΡΡŒ Π½Π° дискС. Если PostgreSQL Π½Π°ΠΈΠ²Π½ΠΎ воспримСт Ρ‚Π°ΠΊΠΎΠ΅ дСйствиС Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½Π½Ρ‹ΠΌ, Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ систСмы Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½Π°.

Π Π°Π· PostgreSQL Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Ρƒ ОБ/Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм/ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ дисков Π² вопросС обСспСчСния нСразрывности, Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… сохраняСт ΠΏΠΎΠ»Π½ΠΎΠ΅ состояниС ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½ΠΎΠΉ дисковой страницы Π² ΠΆΡƒΡ€Π½Π°Π» с ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π΅ΠΉ записью (write-ahead log), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для восстановлСния послС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ сбоя. Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сильно Ρ€Π°Π½Π΄ΠΎΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ UUID ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚ ΠΊΡƒΡ‡Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… страниц диска ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ записи ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° страницы (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ 4 ΠΈΠ»ΠΈ 8 ΠšΠ‘) Π² WAL для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ записи. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊ называСмая полностраничная запись (full-page write, FPW).

НСкоторыС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ UUID (Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ Β«snowflakeΒ» ΠΎΡ‚ Twitter ΠΈΠ»ΠΈ uuid_generate_v1() Π² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΈ uuid-ossp для PostgreSQL) ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ машинС ΠΌΠΎΠ½ΠΎΡ‚ΠΎΠ½Π½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ значСния. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ консолидируСт записи Π² мСньшСС количСство страниц диска ΠΈ сниТаСт FPW.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠΌ влияниС FPW для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ UUID, Π° Ρ‚Π°ΠΊΠΆΠ΅ исслСдуСм статистику WAL. Π― использовал ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ для Π·Π°ΠΌΠ΅Ρ€Π°.

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΊ, ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ UUID Π² ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ write-ahead log.

Π― использовал Ρ‚Π°ΠΊΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ статистику ΠΎΠ± использовании WAL послС провСдСния Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ°. Π’Π°ΠΊ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ статистику событий, выполняСмых ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ послС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ:

Π― ΠΏΡ€ΠΎΠ²Ρ‘Π» тСсты Ρ‚Ρ€Ρ‘Ρ… сцСнариСв:

И Π²ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π·Π°ΠΌΠ΅Ρ€ΠΎΠ² скорости:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ внСшний ΠΊΠ»ΡŽΡ‡ sql

Π“Ρ€Π°Ρ„ΠΈΠΊ скорости вставки UUID

Π’ΠΎΡ‚ статистика WAL для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· способов:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ gen_random_uuid создаёт ΡΡƒΡ‰Π΅ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π² WAL ΠΈΠ·-Π·Π° полностраничных ΠΎΠ±Ρ€Π°Π·ΠΎΠ² (full-page images, FPI), Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ способы этим Π½Π΅ ΡΡ‚Ρ€Π°Π΄Π°ΡŽΡ‚. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ я просто Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΠ» Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π΄Π΅Π»Π°Ρ‚ΡŒ это. Однако Π·Π°ΠΏΡ€Π΅Ρ‚ FPW совсСм Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ стоило Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ дисков. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ утвСрТдаСтся, Ρ‡Ρ‚ΠΎ ZFS ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ бСзопасным для ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ FPW, Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΈΠΌ с ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ.

Π―Π²Π½Ρ‹ΠΌ ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚Π΅Π»Π΅ΠΌ Π² ΠΌΠΎΡ‘ΠΌ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ΅ оказался uuid_generate_v1() – ΠΎΠ½ быстр ΠΈ Π½Π΅ замСдляСтся ΠΏΡ€ΠΈ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΠΈ строк. Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ uuid-ossp ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ установлСно Π² Ρ‚Π°ΠΊΠΈΡ… ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ RDS ΠΈ Citus Cloud, ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ доступно Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… усилий.

Π’ докумСнтация Π΅ΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ uuid_generate_v1:

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

Π˜Ρ‚ΠΎΠ³ΠΈ ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ познакомились с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ ΠΈΡ… использования, я Ρ…ΠΎΡ‡Ρƒ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΠΌΠΎΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡŽ ΠΈΡ… Π² Π²Π°ΡˆΠΈΡ… Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹:

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

ΠžΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ вопросы ΠΌΡ‹ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ Π½Π° Π½Π°ΡˆΠΈΡ… конфСрСнциях. Если Ρƒ вас Π·Π° ΠΏΠ»Π΅Ρ‡Π°ΠΌΠΈ большой ΠΎΠΏΡ‹Ρ‚ Π² ИВ-сфСрС, Π½Π°Π±ΠΎΠ»Π΅Π»ΠΎ, Π½Π°ΠΊΠΈΠΏΠ΅Π»ΠΎ ΠΈ хочСтся Π²Ρ‹ΡΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ ΠΈΠ»ΠΈ Π³Π΄Π΅-Ρ‚ΠΎ ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ совСта, Ρ‚ΠΎ Π½Π° майском фСстивалС ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΉ РИВ++ Π±ΡƒΠ΄ΡƒΡ‚ для этого всС условия, 8 тСматичСских Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ начиная ΠΎΡ‚ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π° ΠΈ мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΈ заканчивая DevOps ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ. ΠŸΠΎΠ΄Π°Ρ‚ΡŒ заявку Π½Π° выступлСниС ΠΌΠΎΠΆΠ½ΠΎ здСсь.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *