SQL និង Relational Database

Table, key, ទំនាក់ទំនង, JOIN, aggregation, normalization, index និង transaction ក្នុង PostgreSQL — រៀនតាមរយៈការសាងសង់ database របស់ហាងអនឡាញតូចមួយ។

កម្មវិធីស្ទើរតែគ្រប់យ៉ាងដែលអ្នកនឹងធ្វើការជាមួយ រក្សាទុកទិន្នន័យក្នុង relational database៖ អតិថិជន និងការបញ្ជាទិញរបស់ហាងមួយ, អ្នកប្រើ និងប្រកាសរបស់កម្មវិធីបណ្តាញសង្គម, គណនី និងប្រតិបត្តិការរបស់ធនាគារ។ នៅពីក្រោយ framework និង API មាន table មួយចំនួន និងភាសាមួយគឺ SQL ដែលសួរសំណួរទៅកាន់ពួកវា។ អ្នកអភិវឌ្ឍន៍ដែលស្ទាត់ជំនាញ SQL អាចឆ្លើយសំណួរ "តើអតិថិជនណាខ្លះមិនបានបញ្ជាទិញក្នុងរយៈពេល 90 ថ្ងៃ?" ដោយ query តែមួយ ចំណែកអ្នកដែលមិនស្ទាត់ នឹងសរសេរ loop ដែលយឺត វែង និងខុស។

ស៊េរីនេះបង្រៀន SQL និងការគិតបែប relational ពីសូន្យ ដោយប្រើ PostgreSQL ដែលជា database ប្រភពបើកចំហមួយក្នុងចំណោមដែលត្រូវបានប្រើច្រើនបំផុត។ អ្នកនឹងរៀនពីរបៀបរចនា table និងដាក់ constraint ដើម្បីកុំឲ្យទិន្នន័យអាក្រក់ចូលបាន របៀបតភ្ជាប់ table ដោយប្រើ primary key និង foreign key និងរបៀបផ្សំពួកវាដោយ JOIN។ អ្នកនឹងសង្ខេបទិន្នន័យដោយ GROUP BY បំបែកសំណួរធំៗទៅជា subquery និង CTE ហើយរៀនថា normalization មានន័យពិតប្រាកដយ៉ាងណា។ បន្ទាប់មកអ្នកនឹងឃើញថា ហេតុអ្វី query មួយយឺត របៀបដែល index ដោះស្រាយវា និងរបៀបដែល transaction រក្សាទិន្នន័យឲ្យត្រឹមត្រូវ នៅពេលមានអ្វីមួយបរាជ័យពាក់កណ្តាលផ្លូវ។

អ្នកនឹងមិនត្រឹមតែអានអំពីវាទេ។ ពេញមួយស៊េរី អ្នកសាងសង់ shopdb ដែលជា database របស់ហាងអនឡាញតូចមួយ ដែលមានអតិថិជន, ផលិតផល, ប្រភេទ, ការបញ្ជាទិញ និងធាតុនៃការបញ្ជាទិញ។ ជំពូកនីមួយៗបន្ថែមគំនិតមួយទៅវា៖ table មុនគេ បន្ទាប់មកទិន្នន័យ, query, ទំនាក់ទំនង, join, របាយការណ៍, ការរចនាដែលស្អាតជាងមុន, ការរចនាដែលលឿនជាងមុន ហើយចុងក្រោយ គឺការបង់ប្រាក់ដែលមានសុវត្ថិភាព ដែលអ្នកហៅពី Node.js។ នៅចុងបញ្ចប់ អ្នកមាន schema ពិតប្រាកដ, script សម្រាប់សាងសង់វាឡើងវិញពីសូន្យ និងសំណុំ query ដែលអ្នកសរសេរដោយខ្លួនឯង។

អ្នកត្រូវការភាពស្រួលជាមួយ terminal ពី មូលដ្ឋានគ្រឹះ Command Line។ PostgreSQL ដំណើរការក្នុង container ដូច្នេះការមើល Docker ជាមុនមានប្រយោជន៍ ប៉ុន្តែជំពូកដំឡើងផ្តល់ឲ្យអ្នកនូវរាល់ command ដែលត្រូវការ។ ជំពូកចុងក្រោយប្រើ JavaScript បន្តិចបន្តួច ដូច្នេះ មូលដ្ឋានគ្រឹះ JavaScript និង TypeScript មានប្រយោជន៍នៅទីនោះ ហើយជំពូកទី 11 យោងត្រឡប់ទៅ Big-O ពី គណិតវិទ្យាសម្រាប់អ្នកសរសេរកម្មវិធី។ អ្វីៗទាំងអស់គឺឥតគិតថ្លៃ ហើយដំណើរការលើកុំព្យូទ័ររបស់អ្នកផ្ទាល់។

ORM, NoSQL database, ការគ្រប់គ្រង database (backup, replication, ការ tune server) និង framework កម្រិតកម្មវិធី ត្រូវបានទុកចោលដោយចេតនា។ ការប្រើ database ពី backend framework ត្រូវបានគ្របដណ្តប់ក្នុង Backend track។

  1. 01ហេតុអ្វីបានជា Database និង Relational Modelហេតុអ្វីបានជាឯកសារ និង spreadsheet លែងដំណើរការ នៅពេលទិន្នន័យកើនឡើង របៀបដែល relational database រៀបចំទិន្នន័យជា table, អ្វីទៅជា SQL និង PostgreSQL និងផែនការសម្រាប់ shopdb ដែលជាហាងអនឡាញតូចមួយដែលយើងសាងសង់ក្នុងគ្រប់ជំពូក។
  2. 02ការដំឡើង PostgreSQLដំណើរការ PostgreSQL 17 ក្នុង Docker container តភ្ជាប់ដោយ psql រៀន meta-command ដែលអ្នកនឹងប្រើជារៀងរាល់ថ្ងៃ បង្កើត database shopdb និងថតឯកសារ project និងរក្សាទិន្នន័យរបស់អ្នករវាងការចាប់ផ្តើមឡើងវិញ។
  3. 03Table, Data Type និង Constraintសរសេរ CREATE TABLE statement ដំបូងរបស់អ្នកសម្រាប់ customers និង products ជ្រើសរើស data type ត្រឹមត្រូវ (ហើយរៀនថាហេតុអ្វីលុយមិនដែលប្រើ float) និងប្រើ NOT NULL, UNIQUE, CHECK, DEFAULT និង primary key ដើម្បីឲ្យ database បដិសេធទិន្នន័យអាក្រក់។
  4. 04ការបញ្ចូល ការកែប្រែ និងការលុបទិន្នន័យបំពេញ shopdb ដោយ row ពិត៖ INSERT មួយ ឬច្រើន row, ទទួលយក id ដែលបង្កើតដោយស្វ័យប្រវត្តិមកវិញដោយ RETURNING, ផ្លាស់ប្តូរទិន្នន័យដោយសុវត្ថិភាពជាមួយ UPDATE និង DELETE, យល់ពី TRUNCATE និង upsert ដោយ ON CONFLICT ហើយសរសេរស្គ្រីប seed.sql ដែលអ្នកអាចដំណើរការឡើងវិញបានគ្រប់ពេល។
  5. 05ការ Query ដោយ SELECTសួរសំណួរ shopdb ដោយ SELECT៖ ជ្រើសរើស column, ច្រោះដោយ WHERE, បញ្ចូលលក្ខខណ្ឌដោយ AND/OR/NOT, ផ្គូផ្គងលំនាំដោយ LIKE, គ្រប់គ្រង three-valued logic របស់ NULL, តម្រៀប, ចែកទំព័រ, លុបទិន្នន័យស្ទួន, គណនាដោយ function និង CASE ហើយរៀនលំដាប់ពិតដែល SQL វាយតម្លៃ query។
  6. 06Key និង Relationshipភ្ជាប់ table តាមរបៀបទំនាក់ទំនង (relational)៖ primary key, surrogate ទល់នឹង natural key, foreign key និង referential integrity, ជម្រើស ON DELETE, ទំនាក់ទំនង one-to-many និង many-to-many។ សាងសង់ categories, orders និង order_items ក្នុង shopdb ហើយ migrate products.category ទៅជា foreign key ពិត។
  7. 07JOINផ្សំ table ក្នុង PostgreSQL ដោយប្រើ INNER, LEFT, RIGHT, FULL, CROSS និង self join ភ្ជាប់ table បីឬបួន រកជួរដែលគ្មានគូ (anti-join) និងចៀសវាងកំហុសបុរាណ៖ ការគុណជួរ និង filter ដែលប្តូរ LEFT JOIN ទៅជា inner join ដោយស្ងៀមស្ងាត់។
  8. 08Aggregation និង Groupingសង្ខេបទិន្នន័យក្នុង PostgreSQL ដោយ COUNT, SUM, AVG, MIN និង MAX ដាក់ជួរជាក្រុមដោយ GROUP BY ត្រងក្រុមដោយ HAVING សាងសង់របាយការណ៍ចំណូលកាត់តាម join គ្រប់គ្រង NULL ឲ្យត្រឹមត្រូវ និងប្រើ string_agg និង FILTER។
  9. 09Subquery, CTE និង Window Functionបំបែកសំណួរ SQL ធំៗទៅជាជំហានដោយ subquery, derived table និង WITH CTE រក្សាទុករបាយការណ៍ជា view ដាក់ចំណាត់ថ្នាក់ និងបូកសរុបជួរដោយ window function ដូចជា ROW_NUMBER និង SUM OVER ជ្រើស top-N ក្នុងមួយក្រុម និងផ្សំលទ្ធផលដោយ UNION, INTERSECT និង EXCEPT។
  10. 10Normalization និងការរចនា Schemaហេតុអ្វី table ធំតែមួយនាំឱ្យមានបញ្ហា អត្ថន័យនៃ 1NF, 2NF និង 3NF ជាភាសាសាមញ្ញ ហេតុអ្វី order_items.unit_price ជាច្បាប់ចម្លងដោយចេតនា និងបញ្ជីត្រួតពិនិត្យ ព្រមទាំងទម្លាប់ migration ដ៏ជាក់ស្តែងសម្រាប់រចនា table ដែលអ្នកនឹងមិនស្តាយក្រោយ។
  11. 11Index និង Query Performanceមើលឱ្យឃើញថាហេតុអ្វី query ក្លាយជាយឺតនៅពេល table ធំឡើង របៀបដែល B-tree index បំប្លែង full scan ទៅជាជំហានតិចតួច របៀបអាន EXPLAIN ANALYZE និងច្បាប់សម្រាប់ composite, partial និង foreign key index ព្រមទាំងករណីដែល index ត្រូវបានមិនអើពើ។
  12. 12Transaction និង Safe SQLធ្វើឱ្យការផ្លាស់ប្តូរច្រើនជំហានជា all-or-nothing ដោយ BEGIN, COMMIT និង ROLLBACK សាងសង់ checkout ដែលមានសុវត្ថិភាពសម្រាប់ shopdb ជៀសវាង race condition ដោយ FOR UPDATE បញ្ឈប់ SQL injection ដោយ parameterized query ក្នុង Node.js និងចាក់សោរអ្វីៗដោយ role និង backup។