PlusMagi's Blog By Pitt Phunsanit Database ðŸ’ū āļšāļąāļ•āļĢāđ€āļˆāļēāļ°āļĢāļđ (Punch Card): āđāļœāđˆāļ™āļāļĢāļ°āļ”āļēāļĐāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđ‚āļĨāļ āļĢāļēāļāļāļēāļ™āđāļŦāđˆāļ‡ 0 āđāļĨāļ° 1

ðŸ’ū āļšāļąāļ•āļĢāđ€āļˆāļēāļ°āļĢāļđ (Punch Card): āđāļœāđˆāļ™āļāļĢāļ°āļ”āļēāļĐāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđ‚āļĨāļ āļĢāļēāļāļāļēāļ™āđāļŦāđˆāļ‡ 0 āđāļĨāļ° 1

āđƒāļ™āļāļēāļ™āļ° System Specialist āđāļĨāļ° Senior Database Architect āđ€āļĢāļēāļĄāļąāļāļˆāļ°āļĄāļ­āļ‡āļ‚āđ‰āļēāļĄāļĢāļēāļāđ€āļŦāļ‡āđ‰āļēāļ‚āļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļ”āļīāļˆāļīāļ—āļąāļĨāļ—āļĩāđˆāļ‹āļąāļšāļ‹āđ‰āļ­āļ™ āđāļ•āđˆāđāļ—āđ‰āļˆāļĢāļīāļ‡āđāļĨāđ‰āļ§ āđāļ™āļ§āļ„āļīāļ”āļžāļ·āđ‰āļ™āļāļēāļ™āļ—āļĩāđˆāļŠāļļāļ”āļ‚āļ­āļ‡āļāļēāļĢāļˆāļąāļ”āđ€āļāđ‡āļšāđāļĨāļ°āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļ‚āđ‰āļ­āļĄāļđāļĨāļ™āļąāđ‰āļ™āļĒāđ‰āļ­āļ™āļāļĨāļąāļšāđ„āļ›āļŠāļđāđˆāđāļœāđˆāļ™āļāļĢāļ°āļ”āļēāļĐāļ—āļĩāđˆāļĄāļĩāļĢāļđāļžāļĢāļļāļ™ āļŦāļĢāļ·āļ­ Punch Card (āļšāļąāļ•āļĢāđ€āļˆāļēāļ°āļĢāļđ) āļŠāļīāđˆāļ‡āļ›āļĢāļ°āļ”āļīāļĐāļāđŒāļ™āļĩāđ‰āđ„āļĄāđˆāđ„āļ”āđ‰āđ€āļ›āđ‡āļ™āđ€āļžāļĩāļĒāļ‡āđāļ„āđˆāđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āļ—āļēāļ‡āļ›āļĢāļ°āļ§āļąāļ•āļīāļĻāļēāļŠāļ•āļĢāđŒ āđāļ•āđˆāļ„āļ·āļ­āļāļēāļĢāļžāļīāļŠāļđāļˆāļ™āđŒāđāļ™āļ§āļ„āļīāļ”āļ—āļĩāđˆāļ§āđˆāļē āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļŠāļēāļĄāļēāļĢāļ–āļ–āļđāļāđāļ›āļĨāļ‡āđƒāļŦāđ‰āđ€āļ›āđ‡āļ™āļĢāļđāļ›āđāļšāļšāđ„āļšāļ™āļēāļĢāļĩ (Binary) āļ—āļĩāđˆāđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļˆāļąāļāļĢāļŠāļēāļĄāļēāļĢāļ–āļ­āđˆāļēāļ™āđāļĨāļ°āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđāļĄāđˆāļ™āļĒāļģ

ðŸ’ū āļšāļąāļ•āļĢāđ€āļˆāļēāļ°āļĢāļđ: āļāļēāļĢāļˆāļģāļĨāļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļ™āđ‚āļĨāļāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ

āļšāļąāļ•āļĢāđ€āļˆāļēāļ°āļĢāļđāļ—āļģāļ‡āļēāļ™āļšāļ™āļŦāļĨāļąāļāļāļēāļĢāļ—āļĩāđˆāđ€āļĢāļĩāļĒāļšāļ‡āđˆāļēāļĒāđāļ•āđˆāļ—āļĢāļ‡āļžāļĨāļąāļ‡ āļ™āļąāđˆāļ™āļ„āļ·āļ­āļĢāļ°āļšāļšāđ„āļšāļ™āļēāļĢāļĩ (Binary) āļ‹āļķāđˆāļ‡āđ€āļ›āđ‡āļ™āļĢāļēāļāļāļēāļ™āļ‚āļ­āļ‡āļ—āļļāļāļĢāļ°āļšāļšāļ„āļ­āļĄāļžāļīāļ§āđ€āļ•āļ­āļĢāđŒ āļ•āļąāđ‰āļ‡āđāļ•āđˆ 0 āļ–āļķāļ‡ 1 āđƒāļ™āļ—āļēāļ‡āļ§āļīāļĻāļ§āļāļĢāļĢāļĄāļ‚āđ‰āļ­āļĄāļđāļĨ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļĄāļ­āļ‡āļ§āđˆāļēāđāļ•āđˆāļĨāļ°āļ„āļ­āļĨāļąāļĄāļ™āđŒāļ‚āļ­āļ‡āļšāļąāļ•āļĢ āļ„āļ·āļ­ Field āļŦāļ™āļķāđˆāļ‡ āđāļĨāļ°āļĢāļđāļ—āļĩāđˆāđ€āļˆāļēāļ°āļ„āļ·āļ­āļāļēāļĢāļāļģāļŦāļ™āļ”āļ„āđˆāļē (Value) āđƒāļŦāđ‰āļāļąāļš Field āļ™āļąāđ‰āļ™

ðŸ’Ą āļāļēāļĢāđāļ—āļ™āļ„āđˆāļēāđ„āļšāļ™āļēāļĢāļĩāļ”āđ‰āļ§āļĒ PostgreSQL

āļŦāļēāļāđ€āļĢāļēāļ•āđ‰āļ­āļ‡āļāļēāļĢāļˆāļģāļĨāļ­āļ‡āļāļēāļĢāļ­āđˆāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļēāļāļšāļąāļ•āļĢāđ€āļˆāļēāļ°āļĢāļđāļ‚āļ™āļēāļ” 80 āļ„āļ­āļĨāļąāļĄāļ™āđŒ (āļ‹āļķāđˆāļ‡āđāļ•āđˆāļĨāļ°āļ„āļ­āļĨāļąāļĄāļ™āđŒāļ„āļ·āļ­āļšāļīāļ•) āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļ‚āļ­āļ‡ PostgreSQL āđ€āļžāļ·āđˆāļ­āļŠāļĢāđ‰āļēāļ‡āļŠāļļāļ”āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāđ€āļĨāļĩāļĒāļ™āđāļšāļšāļāļĢāļ°āļšāļ§āļ™āļāļēāļĢāļ™āļĩāđ‰āđ„āļ”āđ‰ āđ‚āļ”āļĒāđƒāļŦāđ‰āļ„āđˆāļē ‘1’ āđāļ—āļ™āļĢāļđ āđāļĨāļ° ‘0’ āđāļ—āļ™āļžāļ·āđ‰āļ™āļ—āļĩāđˆāļ§āđˆāļēāļ‡

SQL

-- āļŠāļĄāļĄāļ•āļīāļ§āđˆāļēāđ€āļĢāļēāļĄāļĩāļ•āļēāļĢāļēāļ‡ records_punchcards āļ—āļĩāđˆāđ€āļāđ‡āļšāļĢāļŦāļąāļŠ 80 āļšāļīāļ•āđ€āļ›āđ‡āļ™āļ‚āđ‰āļ­āļ„āļ§āļēāļĄ</code>
SELECT * FROM ( 
    SELECT generate_series(1, 3) AS card_id, '10110010'::text AS binary_data 
) AS t 
CROSS JOIN LATERAL unnest(string_to_array(t.binary_data, '') ) WITH ORDINALITY AS bits (bit_value, bit_index)
WHERE bit_index % 4 = 1
LIMIT 10;

āđƒāļ™āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ™āļĩāđ‰ generate_series āļ–āļđāļāđƒāļŠāđ‰āđ€āļžāļ·āđˆāļ­āļˆāļģāļĨāļ­āļ‡āļāļēāļĢāļ­āđˆāļēāļ™āļšāļąāļ•āļĢāļŦāļĨāļēāļĒāđƒāļš (Batch Processing) āđāļĨāļ° unnest āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđāļĒāļāļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļšāļ™āļēāļĢāļĩāļ—āļĩāđˆāļ–āļđāļāļˆāļąāļ”āđ€āļāđ‡āļšāđ€āļ›āđ‡āļ™āļŠāļ•āļĢāļīāļ‡āļĒāļēāļ§ āđ† āļ­āļ­āļāļĄāļēāļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāļ—āļĩāļĨāļ°āļšāļīāļ•āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž

🔄 āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļŠāļļāļ”āļ‚āđ‰āļ­āļĄāļđāļĨ (Batch Processing)

āđƒāļ™āļ­āļ”āļĩāļ• āļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļĄāđˆāđ„āļ”āđ‰āļ–āļđāļāļ›āđ‰āļ­āļ™āđ€āļ‚āđ‰āļēāļŠāļđāđˆāļĢāļ°āļšāļšāļ—āļĩāļĨāļ°āļĢāļēāļĒāļāļēāļĢ āđāļ•āđˆāđ€āļ›āđ‡āļ™ ‘āļ›āļķā āļ‚āļ­āļ‡āļšāļąāļ•āļĢāđ€āļˆāļēāļ°āļĢāļđ āļ‹āļķāđˆāļ‡āļŦāļĄāļēāļĒāļ–āļķāļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāđāļšāļš Batch Job āđƒāļ™āļĄāļļāļĄāļĄāļ­āļ‡āļ‚āļ­āļ‡ Database Architect āļ™āļĩāđˆāļ„āļ·āļ­āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ Transaction āļ‚āļ™āļēāļ”āđƒāļŦāļāđˆāļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļĢāļąāļšāļ›āļĢāļ°āļāļąāļ™āļ„āļ§āļēāļĄāļŠāļĄāļšāļđāļĢāļ“āđŒ (ACID) āļāļēāļĢāđƒāļŠāđ‰ CTEs āļŦāļĢāļ·āļ­ Window Functions āļˆāļķāļ‡āļĄāļĩāļ„āļ§āļēāļĄāļŠāļģāļ„āļąāļāļ­āļĒāđˆāļēāļ‡āļĒāļīāđˆāļ‡āđƒāļ™āļāļēāļĢāļˆāļģāļĨāļ­āļ‡āļāļĢāļ°āļšāļ§āļ™āļāļēāļĢāļ™āļĩāđ‰

SQL

-- āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡: āļāļēāļĢāļ„āļģāļ™āļ§āļ“āļœāļĨāļĢāļ§āļĄāļ‚āļ­āļ‡āļ„āđˆāļē '1' āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āđƒāļ™āļ›āļķāļāļšāļąāļ•āļĢ 3 āđƒāļš</code>
WITH punch_data AS (
    SELECT unnest(string_to_array('10110010', '') ) AS bit_value 
)
SELECT 
    COUNT(bit_value) FILTER (WHERE bit_value = '1') AS total_ones, 
    'āļ‚āđ‰āļ­āļĄāļđāļĨāļ–āļđāļāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāđāļĨāđ‰āļ§'::text AS status;

āđ‚āļ„āđ‰āļ”āļ‚āđ‰āļēāļ‡āļ•āđ‰āļ™āļˆāļģāļĨāļ­āļ‡āļāļēāļĢāļ™āļąāļšāļˆāļģāļ™āļ§āļ™āļšāļīāļ•āļ—āļĩāđˆāđ€āļ›āđ‡āļ™ ‘1’ āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āđƒāļ™āļŠāļļāļ”āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāļ›āđ‰āļ­āļ™āđ€āļ‚āđ‰āļēāļĄāļē (Batch) āļ‹āļķāđˆāļ‡āđ€āļ›āđ‡āļ™āļŦāļąāļ§āđƒāļˆāļ‚āļ­āļ‡āļāļēāļĢāļ„āļģāļ™āļ§āļ“āļŠāļ–āļīāļ•āļīāļ‚āļ™āļēāļ”āđƒāļŦāļāđˆāļ‚āļ­āļ‡ Herman Hollerith āđāļĨāļ°āļĒāļąāļ‡āļ„āļ‡āđ€āļ›āđ‡āļ™āļŦāļĨāļąāļāļāļēāļĢāļžāļ·āđ‰āļ™āļāļēāļ™āđƒāļ™āļāļēāļĢāļ—āļģ Data Aggregation āđƒāļ™āļĢāļ°āļšāļšāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļŠāļĄāļąāļĒāđƒāļŦāļĄāđˆ

âœĻ āļĄāļĢāļ”āļāļ—āļēāļ‡āļ•āļĢāļĢāļāļ° (Logical Legacy)

āđāļĄāđ‰āļ§āđˆāļēāđ€āļĢāļēāļˆāļ°āđƒāļŠāđ‰ JSONB, Cloud Computing āđāļĨāļ° AI āđāļ•āđˆāđāļ™āļ§āļ„āļīāļ”āđ€āļĢāļ·āđˆāļ­āļ‡āļāļēāļĢāļˆāļąāļ”āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļ›āđ‡āļ™āļŠāļļāļ”āļ‚āļ­āļ‡āļšāļīāļ•āļ—āļĩāđˆāļ–āļđāļāļāļģāļŦāļ™āļ”āļ•āļģāđāļŦāļ™āđˆāļ‡āļ­āļĒāđˆāļēāļ‡āļŠāļąāļ”āđ€āļˆāļ™āļāđ‡āļĒāļąāļ‡āļ„āļ‡āļ­āļĒāļđāđˆ āļāļēāļĢāļˆāļģāļāļąāļ”āļ„āļ§āļēāļĄāļĒāļēāļ§āđ‚āļ„āđ‰āļ” 80 āļ„āļ­āļĨāļąāļĄāļ™āđŒ āļŦāļĢāļ·āļ­āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡ Field āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āđ€āļĢāļĩāļĒāļ‡āļĨāļģāļ”āļąāļšāļāļąāļ™ (Schema) āļĨāđ‰āļ§āļ™āļĄāļĩāļĢāļēāļāļāļēāļ™āļĄāļēāļˆāļēāļāļ‚āđ‰āļ­āļˆāļģāļāļąāļ”āļ—āļēāļ‡āļāļēāļĒāļ āļēāļžāļ‚āļ­āļ‡āļšāļąāļ•āļĢāđ€āļˆāļēāļ°āļĢāļđ

āļ”āļąāļ‡āļ™āļąāđ‰āļ™ āļšāļąāļ•āļĢāđ€āļˆāļēāļ°āļĢāļđāļˆāļķāļ‡āđ„āļĄāđˆāđƒāļŠāđˆāđāļ„āđˆāđ€āļĻāļĐāļāļĢāļ°āļ”āļēāļĐāđ€āļāđˆāļē āđāļ•āđˆāđ€āļ›āđ‡āļ™ Data Schema Prototype āļŠāļīāđ‰āļ™āđāļĢāļāļ—āļĩāđˆāļžāļīāļŠāļđāļˆāļ™āđŒāļ§āđˆāļēāļ•āļĢāļĢāļāļ°āđāļĨāļ°āļ„āļ§āļēāļĄāļ„āļīāļ”āđ€āļŠāļīāļ‡āļ™āļēāļĄāļ˜āļĢāļĢāļĄāļŠāļēāļĄāļēāļĢāļ–āļ–āļđāļāđāļ›āļĨāļ‡āđƒāļŦāđ‰āđ€āļ›āđ‡āļ™āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ (Structured Data) āļ—āļĩāđˆāđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļˆāļąāļāļĢāļˆāļ°āđ€āļ‚āđ‰āļēāđƒāļˆāđ„āļ”āđ‰ āļ‹āļķāđˆāļ‡āđ€āļ›āđ‡āļ™āļĢāļēāļāļāļēāļ™āļŠāļģāļ„āļąāļāļ—āļĩāđˆāļ™āļģāđ€āļĢāļēāļĄāļēāļŠāļđāđˆāļāļēāļĢāļ­āļ­āļāđāļšāļš Query āđāļĨāļ°āļĢāļ°āļšāļšāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āđƒāļ™āļ›āļąāļˆāļˆāļļāļšāļąāļ™