ā§Ļā§­ āĻ…āĻ•ā§āĻŸā§‹, ⧍ā§Ļ⧍ā§Ģ¡7 āĻŽāĻŋāύāĻŋāϟ āĻĒāĻĄāĻŧāϤ⧇

PostgreSQL āĻ­āĻŋāω āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚-āĻāϰ āϜāĻ¨ā§āϝ: āϏāĻšāϜ āϜāϝāĻŧ⧇āύ, āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āĻ¸ā§āĻ•ā§āϰ⧀āύ

āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚-āĻāϰ āϜāĻ¨ā§āϝ PostgreSQL āĻ­āĻŋāω āϜāϝāĻŧ⧇āύ āϏāĻšāϜ āĻ•āϰ⧇, āĻĄā§āĻĒā§āϞāĻŋāϕ⧇āϟ SQL āĻ•āĻŽāĻžāϝāĻŧ, āĻāĻŦāĻ‚ āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āϰāĻžāϖ⧇āĨ¤ āĻ•āĻ–āύ āĻ­āĻŋāω āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ, āϕ⧀āĻ­āĻžāĻŦ⧇ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻ•āϰāĻŦ⧇āύ, āĻāĻŦāĻ‚ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āĻĻā§āϰ⧁āϤ āϰāĻžāĻ–āĻŦ⧇āύ āϤāĻž āĻļāĻŋāϖ⧁āύāĨ¤

PostgreSQL āĻ­āĻŋāω āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚-āĻāϰ āϜāĻ¨ā§āϝ: āϏāĻšāϜ āϜāϝāĻŧ⧇āύ, āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āĻ¸ā§āĻ•ā§āϰ⧀āύ

āϕ⧇āύ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āϕ⧋āϝāĻŧ⧇āϰāĻŋ āĻĻā§āϰ⧁āϤ āĻāϞ⧋āĻŽā§‡āϞ⧋ āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧ

āĻāĻ•āϟāĻŋ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āĻ¸ā§āĻ•ā§āϰ⧀āύ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāĻ• āϏāĻšāϜ āĻĒā§āϰāĻļā§āύ āĻ•āϰ⧇ āύāĻžāĨ¤ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāϟāĻž āĻāĻŽāύ āĻāĻ•āϟāĻŋ āϤāĻžāϞāĻŋāĻ•āĻž āϚāĻžāϝāĻŧ āϝāĻžāϕ⧇ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ“ āϏāĻžāϜāĻžāύ⧋ āϝāĻžāĻŦ⧇, āϤāĻžāϞāĻŋāĻ•āĻžāϰ āϏāĻžāĻĨ⧇ āĻŽāĻŋāϞ āφāϛ⧇ āĻāĻŽāύ āĻŸā§‹āϟāĻžāϞ, āĻāĻŦāĻ‚ āĻĒā§āϰāĻžāϝāĻŧāχ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻŦā§āϰ⧇āĻ•āĻĄāĻžāωāύ (āĻ¸ā§āĻĨāĻŋāϤāĻŋ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€, āĻŽāĻžāϏ āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ•, āĻ…āĻĨāĻŦāĻž āĻŽāĻžāϞāĻŋāĻ• āĻ…āύ⧁āϝāĻžāϝāĻŧā§€)āĨ¤

āĻāχ āĻŽāĻŋāĻļā§āϰāĻŖāχ āφāĻĒāύāĻžāϕ⧇ āĻāĻŽāύ SQL-āĻāϰ āĻĻāĻŋāϕ⧇ āϠ⧇āϞ⧇ āĻĻ⧇āϝāĻŧ āϝāĻž āĻ•ā§āϰāĻŽāĻļ āĻŦāĻžāĻĄāĻŧāϤ⧇ āĻĨāĻžāϕ⧇āĨ¤ āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ SELECT āĻĻāĻŋāϝāĻŧ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧇āύ, āϤāĻžāϰāĻĒāϰ āύāĻžāĻŽ āĻ“ āĻ•ā§āϝāĻžāĻŸā§‡āĻ—āϰāĻŋ āϝ⧋āĻ— āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϜāϝāĻŧ⧇āύ āϝ⧋āĻ— āĻ•āϰ⧇āύ, āϤāĻžāϰāĻĒāϰ “āĻļ⧁āϧ⧁ āĻ…ā§āϝāĻžāĻ•āϟāĻŋāĻ­â€ āύāĻŋāϝāĻŧāĻŽ āϝ⧋āĻ— āĻ•āϰ⧇āύ, āϤāĻžāϰāĻĒāϰ āϤāĻžāϰāĻŋāĻ– āϰ⧇āĻžā§āϜ, āϤāĻžāϰāĻĒāϰ “āĻŸā§‡āĻ¸ā§āϟ āϰ⧇āĻ•āĻ°ā§āĻĄ āĻŦāĻžāĻĻ āĻĻāĻŋāĻ¨â€ āχāĻ¤ā§āϝāĻžāĻĻāĻŋāĨ¤ āĻ…āĻ˛ā§āĻĒ āϏāĻŽāϝāĻŧ⧇āϰ āĻŽāĻ§ā§āϝ⧇, āϕ⧋āϝāĻŧ⧇āϰāĻŋ āĻāĻ•āϏāĻžāĻĨ⧇ āĻĻ⧁āχāϟāĻŋ āĻ•āĻžāϜ āĻ•āϰ⧇: āĻĄā§‡āϟāĻž āύāĻŋāϝāĻŧ⧇ āφāϏāĻž āĻāĻŦāĻ‚ āĻŦāĻŋāϜāύ⧇āϏ āύāĻŋāϝāĻŧāĻŽ āĻāύāϕ⧋āĻĄ āĻ•āϰāĻžāĨ¤

āĻĒā§āϰāĻ•ā§ƒāϤ āĻŦā§āϝāĻĨāĻž āφāϏ⧇ āϝāĻ–āύ āĻāĻ•āχ āύāĻŋāϝāĻŧāĻŽ āĻāĻ•āĻžāϧāĻŋāĻ• āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āĻ•āĻĒāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āĻāĻ•āϟāĻŋ āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ “paid” āχāύāĻ­āϝāĻŧ⧇āϏāϕ⧇ āϝ⧇ āϕ⧋āύ⧋ āĻĒ⧇āĻŽā§‡āĻ¨ā§āϟ āϤāĻžāϰāĻŋāĻ–āϝ⧁āĻ•ā§āϤ āχāύāĻ­āϝāĻŧ⧇āϏ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ—āĻŖā§āϝ āĻ•āϰ⧇, āĻ…āĻ¨ā§āϝāϟāĻŋ “paid” āĻ—āĻŖā§āϝ āĻ•āϰ⧇ āϕ⧋āύ⧋ āϏāĻĢāϞ āĻĒ⧇āĻŽā§‡āĻ¨ā§āϟ āϰ⧇āĻ•āĻ°ā§āĻĄ āĻĨāĻžāĻ•āĻž āχāύāĻ­āϝāĻŧ⧇āϏ āĻšāĻŋāϏ⧇āĻŦ⧇āĨ¤ āωāĻ­āϝāĻŧāχ āϝ⧁āĻ•ā§āϤāĻŋāϝ⧁āĻ•ā§āϤ āĻļ⧁āύāĻžāϝāĻŧ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāĻ–āύ āĻāĻ•āχ āϏāĻŽāϝāĻŧāĻ•āĻžāϞ⧇āϰ āϜāĻ¨ā§āϝ āĻĻ⧁āχāϟāĻŋ āĻ¸ā§āĻ•ā§āϰ⧀āύ āĻ­āĻŋāĻ¨ā§āύ āĻŸā§‹āϟāĻžāϞ āĻĻ⧇āĻ–āĻžāϝāĻŧ, āĻāĻŦāĻ‚ āϕ⧇āωāχ āϏāĻ‚āĻ–ā§āϝāĻžāϗ⧁āϞ⧋ āĻŦāĻŋāĻļā§āĻŦāĻžāϏ āĻ•āϰ⧇ āύāĻžāĨ¤

āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āϕ⧋āϝāĻŧ⧇āϰāĻŋ āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“ āĻāϞ⧋āĻŽā§‡āϞ⧋ āĻšāϝāĻŧ āĻ•āĻžāϰāĻŖ āϤāĻžāĻĻ⧇āϰ āĻāĻ•āĻžāϧāĻŋāĻ• UI āϚāĻžāĻšāĻŋāĻĻāĻž āĻāĻ•āϏāĻžāĻĨ⧇ āϏāϰāĻŦāϰāĻžāĻš āĻ•āϰāϤ⧇ āĻšāϝāĻŧ: āύāĻŽāύ⧀āϝāĻŧ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ (āϤāĻžāϰāĻŋāĻ–, āĻŽāĻžāϞāĻŋāĻ•, āĻ¸ā§āĻĨāĻŋāϤāĻŋ, āĻ…āĻžā§āϚāϞ), āĻĒāĻžāĻ āϝ⧋āĻ—ā§āϝ í•„ā§āĻĄ (āĻ—ā§āϰāĻžāĻšāϕ⧇āϰ āύāĻžāĻŽ, āĻĒā§āĻ˛ā§āϝāĻžāύ, āĻļ⧇āώ āĻ…ā§āϝāĻžāĻ•āϟāĻŋāĻ­āĻŋāϟāĻŋ), āϤāĻžāϞāĻŋāĻ•āĻžāϰ āϏāĻžāĻĨ⧇ āĻŽāĻŋāϞ āφāϛ⧇ āĻāĻŽāύ āĻŸā§‹āϟāĻžāϞ, āĻāĻŦāĻ‚ āĻāĻ•ā§āϏāĻĒā§‹āĻ°ā§āϟ-āĻĢā§āϰ⧇āĻ¨ā§āĻĄāϞāĻŋ āϰ⧇āϜāĻžāĻ˛ā§āϟāϏ āϝ⧇āϗ⧁āϞ⧋āϤ⧇ āĻ•āϞāĻžāĻŽ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āĻĨāĻžāϕ⧇āĨ¤

āĻāĻ•āϟāĻŋ āϛ⧋āϟ āωāĻĻāĻžāĻšāϰāĻŖ: āφāĻĒāύāĻžāϰ “Orders” āĻ¸ā§āĻ•ā§āϰ⧀āύ orders, customers, order_items, āĻāĻŦāĻ‚ refunds āϜāϝāĻŧ⧇āύ āĻ•āϰ⧇āĨ¤ “Revenue” āĻ¸ā§āĻ•ā§āϰ⧀āύ āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ—āχ āϤāĻž āύāĻ•āϞ āĻ•āϰ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāĻ•āϟ⧁ āĻ­āĻŋāĻ¨ā§āύ refund āύāĻŋāϝāĻŧāĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤ āĻ•āϝāĻŧ⧇āĻ• āĻŽāĻžāϏ āĻĒāϰ⧇, āφāĻ‚āĻļāĻŋāĻ• āϰāĻŋāĻĢāĻžāĻ¨ā§āĻĄ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻŸā§āϰāĻŋāϟ āĻ•āϰāĻŦ⧇āĻ¨â€”āĻāϰ āĻŽāϤ āĻāĻ•āϟāĻŋ āϛ⧋āϟ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ…āύ⧇āĻ• āĻ¸ā§āĻ•ā§āϰ⧀āύ⧇ āĻāĻ•āχ āϕ⧋āϝāĻŧ⧇āϰāĻŋ āĻāĻĄāĻŋāϟ āĻ“ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻŸā§‡āĻ¸ā§āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

āĻ­āĻŋāω āϏāĻšāĻžāϝāĻŧāϤāĻž āĻ•āϰ⧇ āĻ•āĻžāϰāĻŖ āĻāϗ⧁āϞ⧋ āφāĻĒāύāĻžāϕ⧇ āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰāĻž āϜāϝāĻŧ⧇āύ āĻ“ āύāĻŋāϝāĻŧāĻŽāϗ⧁āϞ⧋ āĻāĻ• āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āĻŦā§āϝāĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧāĨ¤ āĻ¸ā§āĻ•ā§āϰ⧀āύāϗ⧁āϞ⧋ āϏāϰāϞ āĻĨāĻžāϕ⧇, āĻāĻŦāĻ‚ āϏāĻ‚āĻ–ā§āϝāĻžāϗ⧁āϞ⧋ āĻāĻ•āϰāĻ•āĻŽ āĻĨāĻžāϕ⧇āĨ¤

āĻ­āĻŋāω āϏāϰāϞāĻ­āĻžāĻŦ⧇: āĻ•āĻŋ āϤāĻž āĻāĻŦāĻ‚ āĻ•āĻŋ āύāϝāĻŧ

āĻāĻ•āϟāĻŋ PostgreSQL āĻ­āĻŋāω āĻšāϞ⧋ āĻāĻ•āϟāĻŋ āύāĻžāĻŽāĻ•ā§ƒāϤ āϕ⧋āϝāĻŧ⧇āϰāĻŋāĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄā§‡ āĻ›āϝāĻŧāϟāĻŋ āϜāϝāĻŧ⧇āύāϏāĻš āĻāĻ•āχ āĻŦāĻĄāĻŧ SELECT āĻĒ⧇āĻ¸ā§āϟ āĻ•āϰāĻžāϰ āĻŦāĻĻāϞ⧇, āφāĻĒāύāĻŋ āĻāĻ•āĻŦāĻžāϰ āϏ⧇āϟāĻŋ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧇āύ āĻāĻŦāĻ‚ āĻŸā§‡āĻŦāĻŋāϞ⧇āϰ āĻŽāϤ āĻāϟāĻŋāϕ⧇ āϕ⧋āϝāĻŧ⧇āϰāĻŋ āĻ•āϰ⧇āύāĨ¤ āĻāϤ⧇ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ SQL āĻĒāĻĄāĻŧāϤ⧇ āϏāĻšāϜ āĻšāϝāĻŧ āĻāĻŦāĻ‚ “āϕ⧀ āϗ⧁āϪ⧇ āĻāĻ•āϜāύ āĻ…ā§āϝāĻžāĻ•ā§āϟāĻŋāĻ­ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāĻ°â€ āĻāϰ āĻŽāϤ āϏāĻ‚āĻœā§āĻžāĻžāϗ⧁āϞ⧋ āĻāĻ• āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āĻĨāĻžāϕ⧇āĨ¤

āĻ…āύ⧇āĻ• āĻ­āĻŋāω āĻĄā§‡āϟāĻž āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧇ āύāĻžāĨ¤ āϝāĻ–āύ āφāĻĒāύāĻŋ āϚāĻžāϞāĻžāύ SELECT * FROM my_view, PostgreSQL āĻ­āĻŋāω āĻĄā§‡āĻĢāĻŋāύāĻŋāĻļāύ āĻĒā§āϰāϏāĻžāϰāĻŋāϤ āĻ•āϰ⧇ āĻ“ āĻŦ⧇āϏ āĻŸā§‡āĻŦāĻŋāϞāϗ⧁āϞ⧋āϰ āĻŦāĻŋāϰ⧁āĻĻā§āϧ⧇ āφāĻ¨ā§āĻĄāĻžāϰāϞāĻžāχāύāĻŋāĻ‚ āϕ⧋āϝāĻŧ⧇āϰāĻŋ āϚāĻžāϞāĻžāϝāĻŧāĨ¤ āϤāĻžāχ āĻāĻ•āϟāĻž āϏāĻžāϧāĻžāϰāĻŖ āĻ­āĻŋāω āĻ•ā§āϝāĻžāĻļ āύāϝāĻŧāĨ¤ āĻāϟāĻž āĻāĻ•āϟāĻŋ āĻĒ⧁āύāσāĻŦā§āϝāĻŦāĻšāĻžāϰāϝ⧋āĻ—ā§āϝ āϏāĻ‚āĻœā§āĻžāĻžāĨ¤

Materialized views āĻ­āĻŋāĻ¨ā§āĻ¨â€”āĻāϗ⧁āϞ⧋ āϰ⧇āϜāĻžāĻ˛ā§āϟāϏ āĻĄāĻŋāĻ¸ā§āϕ⧇ āĻ¸ā§āĻŸā§‹āϰ āĻ•āϰ⧇, āĻāĻ•āϧāϰāύ⧇āϰ āĻ¸ā§āĻ¨ā§āϝāĻžāĻĒāĻļāĻŸā§‡āϰ āĻŽāϤāĨ¤ āĻāϤ⧇ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āĻ…āύ⧇āĻ• āĻĻā§āϰ⧁āϤ āĻšāϤ⧇ āĻĒāĻžāϰ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĄā§‡āϟāĻž āϤāĻ–āύāχ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāĻŦ⧇ āϝāĻ–āύ āφāĻĒāύāĻŋ materialized view āϰāĻŋāĻĢā§āϰ⧇āĻļ āĻ•āϰāĻŦ⧇āύāĨ¤ āĻĻā§āϰ⧁āϤāϤāĻž āĻŦāύāĻžāĻŽ āϤāĻžāϜāĻž āĻĄā§‡āϟāĻžâ€”āĻāϟāĻžāχ āĻŸā§āϰ⧇āĻĄāĻ…āĻĢāĨ¤

āĻ­āĻŋāω āĻ­āĻžāϞ⧋ āĻ•āĻžāϜ āĻ•āϰ⧇:

  • āϜāϟāĻŋāϞ āϜāϝāĻŧ⧇āύ āĻ“ āĻ—āĻŖāĻŋāϤ āĻ•āϰāĻž āĻ•āϞāĻžāĻŽāϗ⧁āϞ⧋ āĻāĻ•āĻžāϧāĻŋāĻ• āĻ¸ā§āĻ•ā§āϰ⧀āύ⧇ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ
  • āϏāĻ‚āĻœā§āĻžāĻžāϗ⧁āϞ⧋āϕ⧇ āϏāĻ™ā§āĻ—āϤāĻŋāĻļā§€āϞ āϰāĻžāĻ–āĻžāϰ āϜāĻ¨ā§āϝ (āĻāĻ•āϟāĻŋ āĻ āĻŋāĻ• āĻ•āϰāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āϏāĻŦ āύāĻŋāĻ°ā§āĻ­āϰāĻļā§€āϞ āϰāĻŋāĻĒā§‹āĻ°ā§āĻŸā§‡ āφāĻĒāĻĄā§‡āϟ āĻšāĻŦ⧇)
  • āϏāĻ‚āĻŦ⧇āĻĻāύāĻļā§€āϞ āĻ•āϞāĻžāĻŽāϗ⧁āϞ⧋ āϞ⧁āĻ•āĻŋāϝāĻŧ⧇ āϰ⧇āϖ⧇ āϕ⧇āĻŦāϞ āϰāĻŋāĻĒā§‹āĻ°ā§āĻŸā§‡ āĻĻāϰāĻ•āĻžāϰāĻŋ āĻĢāĻŋāĻ˛ā§āĻĄ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ
  • āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āϟāĻŋāĻŽāϕ⧇ āĻāĻ•āϟāĻŋ āϏāϰāϞ “āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āĻ¸ā§āĻ•āĻŋāĻŽāĻžâ€ āĻĻ⧇āϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ

āĻ­āĻŋāω āϜāĻžāĻĻā§ā§ŽāĻĒāĻ¨ā§āύāĻ­āĻžāĻŦ⧇ āĻ āĻŋāĻ• āĻ•āϰāĻŦ⧇ āύāĻž:

  • āϧ⧀āϰ āĻŦ⧇āϏ āĻŸā§‡āĻŦāĻŋāϞ (āĻāĻ•āϟāĻŋ āĻ­āĻŋāω āϤāĻŦ⧁āĻ“ āϏ⧇āϗ⧁āϞ⧋ āĻĒāĻĄāĻŧ⧇)
  • āϜāϝāĻŧ⧇āύ āϕ⧀āϗ⧁āϞ⧋ āĻŦāĻž āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ•āϞāĻžāĻŽāϗ⧁āϞ⧋āϰ āĻ…āύ⧁āĻĒāĻ¸ā§āĻĨāĻŋāϤ āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏ
  • āĻāĻŽāύ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āϝāĻž āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻŦāĻ¨ā§āϧ āĻ•āϰ⧇ āĻĻ⧇āϝāĻŧ (āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, indexed āĻ•āϞāĻžāĻŽā§‡ WHERE-āĻ āĻĢāĻžāĻ‚āĻļāύ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāĻž)

āϝāĻĻāĻŋ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϰāĻŋāĻĒā§‹āĻ°ā§āĻŸā§‡ “āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāϰ⧇āϰ āύāĻžāĻŽ āĻ“ paid status āϏāĻš orders” āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϝāĻŧ, āĻāĻ•āϟāĻŋ āĻ­āĻŋāω āϏ⧇āχ āϜāϝāĻŧ⧇āύ āĻ“ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āϞāϜāĻŋāĻ•āϕ⧇ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄāĻžāχāϜ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āϝāĻĻāĻŋ orders āĻŦāĻĄāĻŧ āĻāĻŦāĻ‚ customer_id āĻŦāĻž created_at-āĻ āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏ āύāĻž āĻĨāĻžāϕ⧇, āϤāĻ–āύ āĻ­āĻŋāω āϤāĻŦ⧁āĻ“ āϧ⧀āϰ āĻĨāĻžāĻ•āĻŦ⧇ āϝāϤāĻ•ā§āώāĻŖ āύāĻž āĻŦ⧇āϏ āĻŸā§‡āĻŦāĻŋāϞ āϟāĻŋāωāύ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

āĻ•āĻ–āύ āĻ­āĻŋāω āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āĻ¸ā§āĻ•ā§āϰāĻŋāύ⧇āϰ āϜāĻ¨ā§āϝ āϏāĻ āĻŋāĻ• āϟ⧁āϞ

āϝāĻ–āύ āφāĻĒāύāĻžāϰ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āĻ¸ā§āĻ•ā§āϰ⧀āύāϗ⧁āϞ⧋ āĻāĻ•āχ āϜāϝāĻŧ⧇āύ, āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ“ āĻĄā§‡āϰāĻžāχāĻ­āĻĄ āĻĢāĻŋāĻ˛ā§āĻĄāϗ⧁āϞ⧋ āĻŦāĻžāϰāĻŦāĻžāϰ āϰāĻŋāϕ⧋āϝāĻŧā§āϝāĻžāϰ āĻ•āϰ⧇ āϤāĻ–āύ āĻ­āĻŋāω āωāĻĒāϝ⧁āĻ•ā§āϤāĨ¤ āĻĻā§€āĻ°ā§āϘ āϕ⧋āϝāĻŧ⧇āϰāĻŋ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ āϟāĻžāχāϞ āĻ“ āĻāĻ•ā§āϏāĻĒā§‹āĻ°ā§āĻŸā§‡ āĻ•āĻĒāĻŋ āĻ•āϰāĻžāϰ āĻŦāĻĻāϞ⧇, āĻāĻ•āĻŦāĻžāϰ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻ¸ā§āĻ•ā§āϰ⧀āύāϗ⧁āϞ⧋ āϏ⧇āχ āύāĻžāĻŽāĻ•ā§ƒāϤ āĻĄā§‡āϟāĻžāϏ⧇āϟ āĻĒāĻĄāĻŧ⧁āĻ•āĨ¤

āĻ­āĻŋāω āϤāĻ–āύ āĻ­āĻžāϞ⧋ āĻ•āĻžāϜ āĻ•āϰ⧇ āϝāĻ–āύ āĻŦāĻŋāϜāύ⧇āϏ āϞāϜāĻŋāĻ• āϏ⧂āĻ•ā§āĻˇā§āĻŽāĻ­āĻžāĻŦ⧇ āϭ⧁āϞ āĻšāĻ“āϝāĻŧāĻžāϰ āϏāĻŽā§āĻ­āĻžāĻŦāύāĻž āĻĨāĻžāϕ⧇āĨ¤ āϝāĻĻāĻŋ “active customer” āĻŽāĻžāύ⧇ “āĻ—āϤ 90 āĻĻāĻŋāύ⧇ āĻ…āĻ¨ā§āϤāϤ āĻāĻ•āϟāĻŋ paid invoice āφāϛ⧇ āĻāĻŦāĻ‚ churned āĻšāĻŋāϏāĻžāĻŦ⧇ āĻŽāĻžāĻ°ā§āĻ• āĻ•āϰāĻž āύāϝāĻŧ”, āϤāĻžāĻšāϞ⧇ āφāĻĒāύāĻŋ āϚāĻžāύ āύāĻž āĻĒāĻžāρāϚāϟāĻŋ āĻ¸ā§āĻ•ā§āϰ⧀āύ āφāϞāĻžāĻĻāĻž āφāϞāĻžāĻĻāĻž āĻ­āĻžāĻŦ⧇ āϏ⧇āϟāĻŋ āχāĻŽāĻĒā§āϞāĻŋāĻŽā§‡āĻ¨ā§āϟ āĻ•āϰ⧁āĻ•āĨ¤ āĻāĻ• āĻ­āĻŋāωāϤ⧇ āϰāĻžāϖ⧁āύ, āϏāĻŦ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āϏāĻ™ā§āĻ—āϤāĻŋāĻļā§€āϞ āĻĨāĻžāĻ•āĻŦ⧇āĨ¤

āĻ­āĻŋāω āϤāĻ–āύāĻ“ שימוש āĻ•āϰ⧇ āϝāĻ–āύ āφāĻĒāύāĻžāϰ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āϟ⧁āϞ (āĻŦāĻž UI āĻŦāĻŋāĻ˛ā§āĻĄāĻžāϰ) āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āĻ•āϞāĻžāĻŽ āύāĻžāĻŽ āϚāĻžāϝāĻŧāĨ¤ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻ•ā§āϰ⧀āύ customer_name, mrr, āĻŦāĻž last_payment_at-āĻāϰ āĻŽāϤ āĻĢāĻŋāĻ˛ā§āĻĄā§‡ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻ­āĻŋāω āĻĻāĻŋāϝāĻŧ⧇ āφāĻĒāύāĻŋ āĻ“āχ āĻ•āϞāĻžāĻŽāϗ⧁āϞ⧋ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āϰāĻžāĻ–āĻŦ⧇āύ āϝāϤāĻ•ā§āώāĻŖ āĻ­āĻŋāω-āϰ āϚ⧁āĻ•ā§āϤāĻŋ āĻŦāϜāĻžāϝāĻŧ āϰāĻžāϖ⧇āύāĨ¤

āϏāĻžāϧāĻžāϰāĻŖāĻ­āĻžāĻŦ⧇, āϝāĻ–āύ āφāĻĒāύāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āϜāϝāĻŧ⧇āύ āĻ“ āĻŽā§‡āĻŸā§āϰāĻŋāϕ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻļ⧇āϝāĻŧāĻžāĻ°ā§āĻĄ āϏāĻ‚āĻœā§āĻžāĻž āϚāĻžāύ āĻāĻŦāĻ‚ āĻ¸ā§āĻ•ā§āϰ⧀āύ āĻ“ āĻāĻ•ā§āϏāĻĒā§‹āĻ°ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ, āĻĒā§‚āĻ°ā§āĻŦāĻžāύ⧁āĻŽāĻžāύāϝ⧋āĻ—ā§āϝ āĻ•āϞāĻžāĻŽ āϏ⧇āϟ āϚāĻžāĻ¨â€”āϤāĻ–āύ āĻ­āĻŋāω āϏāĻ āĻŋāĻ• āϟ⧁āϞāĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ: āĻāĻ•āϟāĻŋ āϏāĻžāĻĒā§‹āĻ°ā§āϟ āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ “āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāϰ āĻĻā§āĻŦāĻžāϰāĻž āĻ–ā§‹āϞāĻž āϟāĻŋāĻ•āĻŋāĻŸâ€ āĻĻ⧇āĻ–āĻžāϝāĻŧ, āφāϰ āĻāĻ•āϟāĻŋ āĻĢāĻžāχāĻ¨ā§āϝāĻžāĻ¨ā§āϏ āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ “āĻ…āĻŦ⧈āϤāĻžāύ āχāύāĻ­āϝāĻŧ⧇āϏāϏāĻš āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāĻ°â€ āĻĻ⧇āĻ–āĻžāϝāĻŧāĨ¤ āωāĻ­āϝāĻŧ⧇āχ āĻāĻ•āχ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāϰ āφāχāĻĄā§‡āĻ¨ā§āϟāĻŋāϟāĻŋ āϜāϝāĻŧ⧇āύ, āĻāĻ•āχ “is_active” āϞāϜāĻŋāĻ•, āĻāĻŦāĻ‚ āĻāĻ•āχ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āĻŽāĻžāϞāĻŋāĻ• āĻĢāĻŋāĻ˛ā§āĻĄ āϚāĻžāϝāĻŧāĨ¤ āĻāĻ•āϟāĻŋ reporting_customers āĻ­āĻŋāω āĻāĻ•āĻŦāĻžāϰ⧇ āĻ“āχ āϏāĻŦ āĻĢāĻŋāĻ˛ā§āĻĄ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇ āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ¸ā§āĻ•ā§āϰ⧀āύ āϤāĻžāϰ āύāĻŋāϜāĻ¸ā§āĻŦ āϛ⧋āϟ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āϝ⧋āĻ— āĻ•āϰ⧇āĨ¤

āĻ•āĻ–āύ āĻ­āĻŋāω āĻāĻĄāĻŧāĻŋāϝāĻŧ⧇ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ

āĻ­āĻŋāωāϗ⧁āϞ⧋ āĻ­āĻžāϞ⧋ āϝāĻ–āύ āĻ…āύ⧇āĻ• āĻ¸ā§āĻ•ā§āϰ⧀āύ āĻāĻ•āχ āϜāϝāĻŧ⧇āύ āĻ“ āϏāĻ‚āĻœā§āĻžāĻž āϚāĻžāϝāĻŧāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āϝāĻĻāĻŋ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āφāϞāĻžāĻĻāĻž “āĻ¸ā§āύ⧋āĻĢā§āϞ⧇āĻ•â€ āĻšāϝāĻŧ, āĻ­āĻŋāω āĻāĻ•āϟāĻŋ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āϜāϟāĻŋāϞāϤāĻž āϞ⧁āĻ•āĻŋāϝāĻŧ⧇ āϰāĻžāϖ⧇ āĻŦāϰāĻ‚ āϤāĻž āĻ•āĻŽāĻžāϝāĻŧ āύāĻžāĨ¤

āĻ­āĻŋāω āĻ–āĻžāϰāĻžāĻĒ āĻĢāĻŋāϟ āϝāĻ–āύ āĻĒā§āϰāĻ•ā§ƒāϤ āĻ•āĻžāϜāϟāĻŋ āĻ¸ā§āĻ•ā§āϰ⧀āύāĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻ­āĻŋāĻ¨ā§āύ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ, āĻ—ā§āϰ⧁āĻĒāĻŋāĻ‚ āĻ“ āϏāĻŽāϝāĻŧ āωāχāĻ¨ā§āĻĄā§‹ āĻĻāϰāĻ•āĻžāϰ āĻ•āϰ⧇āĨ¤ āφāĻĒāύāĻŋ āϤāĻ–āύ āĻāĻŽāύ āĻ•āϞāĻžāĻŽ āϝ⧋āĻ— āĻ•āϰāϤ⧇ āĻļ⧁āϰ⧁ āĻ•āϰāĻŦ⧇āύ “āϜāĻžāĻ¸ā§āϟ āχāύ āϕ⧇āĻ¸â€ āĻŦāϞ⧇, āĻāĻŦāĻ‚ āĻ­āĻŋāω āĻšāϝāĻŧ⧇ āϝāĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ āĻ•āĻŋāĻšā§‡āύ āϏāĻŋāĻ™ā§āĻ• āϕ⧋āϝāĻŧ⧇āϰāĻŋ āϝāĻž āϕ⧇āω āĻĒ⧁āϰ⧋āĻĒ⧁āϰāĻŋ āĻŦ⧁āĻā§‡ āύāĻžāĨ¤

āĻ­āĻŋāω āĻ…āύ⧁āĻĒāϝ⧁āĻ•ā§āϤ āĻšāĻ“āϝāĻŧāĻžāϰ āϏāĻžāϧāĻžāϰāĻŖ āϞāĻ•ā§āώāĻŖāϗ⧁āϞ⧋:

  • āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ āĻ­āĻŋāĻ¨ā§āύ GROUP BY, āϤāĻžāϰāĻŋāĻ– āĻŦāĻžāϕ⧇āϟ, āĻŦāĻž “top N” āϞāϜāĻŋāĻ• āϚāĻžāϝāĻŧ
  • āĻ­āĻŋāω āĻĄāϜāύāĻ–āĻžāύ⧇āĻ• āϜāϝāĻŧ⧇āύ⧇ āĻŦāĻžāĻĄāĻŧ⧇ āĻ•āĻžāϰāĻŖ āĻāϟāĻŋ āĻāĻ•āϏāĻžāĻĨ⧇ āϏāĻŦ āϟāĻŋāĻŽāϕ⧇ āϏāĻžāĻ°ā§āĻ­ āĻ•āϰāϤ⧇ āϚāĻžāϝāĻŧ
  • āφāĻĒāύāĻŋ āĻ•āĻĄāĻŧāĻž āϰ⧋-āϞ⧇āϭ⧇āϞ āϏāĻŋāĻ•āĻŋāωāϰāĻŋāϟāĻŋ āϚāĻžāύ āĻāĻŦāĻ‚ āĻ­āĻŋāωāϟāĻŋ RLS āĻ…āϧ⧀āύ⧇ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āφāϚāϰāĻŖ āĻ•āϰ⧇ āϤāĻžāϤ⧇ āĻĒ⧁āϰ⧋āĻĒ⧁āϰāĻŋ āύāĻŋāĻļā§āϚāĻŋāϤ āύāύ
  • āφāĻĒāύāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ-āχāύ-āϟāĻžāχāĻŽ āϏāĻ‚āĻ–ā§āϝāĻžāϗ⧁āϞāĻŋ āϚāĻžāύ (“āĻŽāĻ§ā§āϝāϰāĻžāϤ⧇ āĻšāĻŋāϏāĻžāĻŦā§‡â€), āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻŦ⧇āϏ āĻŸā§‡āĻŦāĻŋāϞāϗ⧁āϞāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāĻšā§āϛ⧇
  • āϕ⧋āϝāĻŧ⧇āϰāĻŋ āϕ⧇āĻŦāϞ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ WHERE-āĻ āĻĻā§āϰ⧁āϤ āĻāĻŦāĻ‚ āĻŦāĻŋāĻ¸ā§āϤ⧃āϤ āĻ¸ā§āĻ•ā§āϝāĻžāύ⧇āϰ āϜāĻ¨ā§āϝ āϧ⧀āϰ

āĻāχ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āĻ•āĻžāĻœā§‡āϰ āϏāĻžāĻĨ⧇ āĻŽāĻŋāϞāĻžāύ⧋ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ āĻŦ⧇āϛ⧇ āύāĻŋāύāĨ¤ āĻĻ⧈āύāĻ¨ā§āĻĻāĻŋāύ āĻāĻ•ā§āϏāĻŋāĻ•āĻŋāωāϟāĻŋāĻ­ āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄā§‡āϰ āϜāĻ¨ā§āϝ āϝāĻž āĻĻā§āϰ⧁āϤ āĻ“ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āϏāĻ‚āĻ–ā§āϝāĻž āϚāĻžāϝāĻŧ, materialized view āĻŦāĻž āĻļāĻŋāĻĄāĻŋāωāϞāĻ•ā§ƒāϤ āϏāĻžāĻŽāĻžāϰāĻŋ āĻŸā§‡āĻŦāĻŋāϞ āĻĒā§āϰāĻžāϝāĻŧāχ āϞāĻžāχāĻ­ āĻ­āĻŋāωāϝāĻŧ⧇āϰ āĻšā§‡āϝāĻŧ⧇ āĻ­āĻžāϞāĨ¤

āĻ…āĻ¨ā§āϝ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻĒā§āϰāĻžāϝāĻŧāχ āĻ­āĻžāϞ āĻ•āĻžāϜ āĻ•āϰ⧇:

  • āĻĒā§āϰāĻŋ-āĻ•āĻŽā§āĻĒāĻŋāωāĻŸā§‡āĻĄ āĻŸā§‹āϟāĻžāϞāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ materialized views (āϘāĻŖā§āϟāĻž āĻŦāĻž āύāĻžāχāϟāϞāĻŋ āϰāĻŋāĻĢā§āϰ⧇āĻļ)
  • āĻŦāĻĄāĻŧ āχāϭ⧇āĻ¨ā§āϟ āĻŸā§‡āĻŦāĻŋāϞāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϜāĻŦ āĻĻā§āĻŦāĻžāϰāĻž āĻŽā§‡āχāύāĻŸā§‡āχāύ āĻ•āϰāĻž āϏāĻžāĻŽāĻžāϰāĻŋ āĻŸā§‡āĻŦāĻŋāϞ
  • āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ¸ā§āĻ•ā§āϰ⧀āύ⧇āϰ āϜāĻ¨ā§āϝ āϛ⧋āϟ, āωāĻĻā§āĻĻ⧇āĻļā§āϝāĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻ­āĻŋāω āϏāĻš āĻāĻ•āϟāĻŋ āĻĄā§‡āĻĄāĻŋāϕ⧇āĻŸā§‡āĻĄ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āĻ¸ā§āĻ•āĻŋāĻŽāĻž
  • āĻĒāĻžāϰāĻŽāĻŋāĻļāύ āϜāϟāĻŋāϞ āĻšāϞ⧇ security-definer āĻĢāĻžāĻ‚āĻļāύ āĻŦāĻž āϝāĻ¤ā§āύ āύāĻŋāϝāĻŧ⧇ āύāĻ•āĻļāĻž āĻ•āϰāĻž RLS āύ⧀āϤāĻŋāĻŽāĻžāϞāĻž
  • āϝāĻĻāĻŋ āϞāϜāĻŋāĻ• āϏāĻ¤ā§āϝāĻŋāχ āχāωāύāĻŋāĻ• āĻ“ āϛ⧋āϟ āĻšāϝāĻŧ, āϤāĻ–āύ āĻ¸ā§āĻ•ā§āϰ⧀āύ-āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϕ⧋āϝāĻŧ⧇āϰāĻŋ

āωāĻĻāĻžāĻšāϰāĻŖ: āϏāĻžāĻĒā§‹āĻ°ā§āϟ āϚāĻžāχāϛ⧇ “āφāϜ āĻāĻœā§‡āĻ¨ā§āϟ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āϟāĻŋāĻ•āĻŋāĻŸâ€, āφāϰ āĻĢāĻžāχāĻ¨ā§āϝāĻžāĻ¨ā§āϏ āϚāĻžāχāϛ⧇ “āĻ•āĻ¨ā§āĻŸā§āϰāĻžāĻ•ā§āϟ āĻŽāĻžāϏ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āϟāĻŋāĻ•āĻŋāĻŸâ€āĨ¤ āĻĻ⧁āĻŸā§‹āϕ⧇ āĻāĻ• āĻ­āĻŋāωāϤ⧇ āĻœā§‹āϰ āĻ•āϰāĻžāϞ⧇ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻŦāĻŋāĻ­ā§āϰāĻžāĻ¨ā§āϤ āĻ•āϞāĻžāĻŽ āĻ“ āϧ⧀āϰ āĻ¸ā§āĻ•ā§āϝāĻžāύ āĻšāϝāĻŧāĨ¤ āĻĻ⧁āχāϟāĻŋ āϛ⧋āϟ, āĻĢā§‹āĻ•āĻžāϏāĻĄ āĻ­āĻŋāω (āĻ…āĻĨāĻŦāĻž āĻāĻ•āϟāĻŋ āϏāĻžāĻŽāĻžāϰāĻŋ āĻŸā§‡āĻŦāĻŋāϞ āĻĒā§āϞāĻžāϏ āĻ¸ā§āĻ•ā§āϰāĻŋāύ āϕ⧋āϝāĻŧ⧇āϰāĻŋ) āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻ“ āύāĻŋāϰāĻžāĻĒāĻĻ āĻĨāĻžāϕ⧇āĨ¤

āϧāĻžāĻĒ⧇ āϧāĻžāĻĒ⧇: āĻāĻ•āϟāĻŋ āĻŽā§‡āχāύāĻŸā§‡āχāύ⧇āĻŦāϞ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āĻ­āĻŋāω āĻŦāĻžāύāĻžāύ⧋

āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻŦāĻĻāϞāĻžāύ⧋ āĻ›āĻžāĻĄāĻŧāĻžāχ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ•āϰ⧁āύ
āφāĻĒāύāĻžāϰ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āĻ…ā§āϝāĻžāĻĒ Ready āĻšāϞ⧇ AppMaster Cloud āĻŦāĻž āφāĻĒāύāĻžāϰ āύāĻŋāĻœā§‡āϰ āĻ•ā§āϞāĻžāωāĻĄā§‡ āĻĒāĻžāĻ āĻžāĻ¨â€”āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ›āĻžāĻĄāĻŧāĻžāĨ¤
āĻ…ā§āϝāĻžāĻĒ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ•āϰ⧁āύ

āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āύāϝāĻŧ, āĻ¸ā§āĻ•ā§āϰ⧀āύ āĻĻāĻŋāϝāĻŧ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύāĨ¤ āϰāĻŋāĻĒā§‹āĻ°ā§āĻŸā§‡ āĻ āĻŋāĻ• āϕ⧋āύ āĻ•āϞāĻžāĻŽāϗ⧁āϞ⧋ āĻĻāϰāĻ•āĻžāϰ, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰāĻž āϕ⧋āύ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰāϗ⧁āϞ⧋ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦ⧇āĻļāĻŋ āϞāĻžāĻ—āĻžāĻŦ⧇ (āϤāĻžāϰāĻŋāĻ– āϰ⧇āĻžā§āϜ, āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ, āĻŽāĻžāϞāĻŋāĻ•), āĻāĻŦāĻ‚ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āϏāĻžāϜāĻžāύ⧋āϰ āύāĻŋāϝāĻŧāĻŽ āĻ•ā§€â€”āĻāϗ⧁āϞ⧋ āϞāĻŋāϖ⧇ āϰāĻžāϖ⧁āύāĨ¤ āĻāϟāĻž āφāĻĒāύāĻžāϕ⧇ “āĻ•āĻŋāĻšā§‡āύ āϏāĻŋāĻ™ā§āĻ•â€ āĻ­āĻŋāω āĻŦāĻžāύāĻžāύ⧋ āĻĨ⧇āϕ⧇ āϰāĻ•ā§āώāĻž āĻ•āϰāĻŦ⧇āĨ¤

āϤāĻžāϰāĻĒāϰ āĻŦ⧇āϏ āϕ⧋āϝāĻŧ⧇āϰāĻŋāϟāĻŋ āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ SELECT āĻšāĻŋāϏ⧇āĻŦ⧇ āϞāĻŋāϖ⧁āύāĨ¤ āĻŦāĻžāĻ¸ā§āϤāĻŦ āύāĻŽā§āύāĻž āĻĄā§‡āϟāĻž āύāĻŋāϝāĻŧ⧇ āϏ⧇āϟāĻŋ āϏāĻ āĻŋāĻ• āĻ•āϰ⧇ āύāĻŋāύ, āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰāχ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāύ āϕ⧋āύāϗ⧁āϞ⧋ āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰāĻž āĻ­āĻŋāω āϤ⧇ āϝāĻžāĻŦ⧇āĨ¤

āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻŋāĻ• āĻāĻĒā§āϰ⧋āϚ:

  • āφāωāϟāĻĒ⧁āϟ āĻ•āϞāĻžāĻŽāϗ⧁āϞ⧋ āĻ“ āĻĒā§āϰāϤāĻŋāϟāĻŋāϰ āĻŽāĻžāύ⧇ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰ⧁āύāĨ¤
  • āϐ āĻ•āϞāĻžāĻŽāϗ⧁āϞ⧋ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻž āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϛ⧋āϟ āϕ⧋āϝāĻŧ⧇āϰāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύāĨ¤
  • āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ, āĻĒ⧁āύāσāĻŦā§āϝāĻŦāĻšāĻžāϰāϝ⧋āĻ—ā§āϝ āϜāϝāĻŧ⧇āύ āĻ“ āĻĄā§‡āϰāĻžāχāĻ­āĻĄ āĻĢāĻŋāĻ˛ā§āĻĄāϗ⧁āϞ⧋ āĻ­āĻŋāωāϤ⧇ āύāĻŋāϝāĻŧ⧇ āφāϏ⧁āύāĨ¤
  • āĻ­āĻŋāωāϕ⧇ āϏāĻ‚āϕ⧀āĻ°ā§āĻŖ āϰāĻžāϖ⧁āύ (āĻāĻ• āωāĻĻā§āĻĻ⧇āĻļā§āϝ, āĻāĻ• āĻļā§āϰ⧋āϤāĻž) āĻāĻŦāĻ‚ āĻ¸ā§āĻĒāĻˇā§āϟ āύāĻžāĻŽ āĻĻāĻŋāύāĨ¤
  • UI āϝāĻĻāĻŋ āĻŦāĻ¨ā§āϧ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āϞ⧇āĻŦ⧇āϞ āϚāĻžāϝāĻŧ, āϕ⧋āϰ āĻ­āĻŋāωāϤ⧇ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻĢāϰāĻŽā§āϝāĻžāϟāĻŋāĻ‚ āĻŽāĻŋāĻļāĻžāĻŦ⧇āύ āύāĻžâ€”āĻāĻ•āϟāĻŋ āφāϞāĻžāĻĻāĻž “āĻĒā§āϰ⧇āĻœā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨â€ āĻ­āĻŋāω āϰāĻžāϖ⧁āύāĨ¤

āύāĻžāĻŽāĻ•āϰāĻŖ āĻ“ āĻ¸ā§āĻĒāĻˇā§āϟāϤāĻž āĻŽā§‡āϧāĻžāĻŦā§€ SQL-āĻāϰ āĻšā§‡āϝāĻŧ⧇ āĻŦ⧇āĻļāĻŋ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖāĨ¤ āĻ¸ā§āĻĒāĻˇā§āϟ āĻ•āϞāĻžāĻŽ āϤāĻžāϞāĻŋāĻ•āĻž āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āϰ⧁āύ, SELECT * āĻāĻĄāĻŧāĻŋāϝāĻŧ⧇ āϚāϞ⧁āύ, āĻāĻŦāĻ‚ āĻāĻŽāύ āύāĻžāĻŽ āĻĻāĻŋāύ āϝ⧇ āĻĄā§‡āϟāĻž āĻŦā§‹āĻāĻžāϝāĻŧ (āωāĻĻāĻžāĻšāϰāĻŖ: total_paid_cents āĻŦāĻĻāϞ⧇ amount āύāϝāĻŧ)āĨ¤

āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāĻ¨ā§āϏ āϤāĻ–āύāĻ“ āφāϏ⧇ āĻ­āĻŋāω-āϰ āύāĻŋāĻšā§‡āϰ āĻŸā§‡āĻŦāĻŋāϞāϗ⧁āϞ⧋āϰ āĻ•āĻžāĻ› āĻĨ⧇āϕ⧇āĨ¤ āĻāĻ•āĻŦāĻžāϰ āφāĻĒāύāĻŋ āĻĒā§āϰāϧāĻžāύ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ“ āϏāĻžāϜāĻžāύ⧋āϰ āύāĻŋāϝāĻŧāĻŽ āϜāĻžāύ⧇āύ, āϤāĻžāĻĻ⧇āϰ āĻŽāĻŋāϞāĻŋāϝāĻŧ⧇āχ āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏ āϝ⧋āĻ— āĻ•āϰ⧁āύ (āωāĻĻāĻžāĻšāϰāĻŖ: created_at, status, customer_id, āĻ…āĻĨāĻŦāĻž āĻāĻ•āϟāĻŋ āωāĻĒāϝ⧋āĻ—ā§€ āĻ•āĻŽā§āĻĒā§‹āϜāĻŋāϟ āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏ)āĨ¤

āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻ­āĻŋāω āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻ•āϰāĻŦ⧇āύ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āϭ⧇āĻ™ā§āϗ⧇ āύāĻž āϝāĻžāϝāĻŧ

āϏāĻ™ā§āĻ—āϤāĻŋāĻĒā§‚āĻ°ā§āĻŖ āĻŽā§‡āĻŸā§āϰāĻŋāĻ• āĻĻā§āϰ⧁āϤ āĻĒāĻžāĻ āĻžāύ
āϝ⧇āχ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āĻ•āĻ¨ā§āĻŸā§āĻ°ā§āϝāĻžāĻ•ā§āĻŸā§‡ āφāĻĒāύāĻŋ āĻŦāĻŋāĻļā§āĻŦāĻžāϏ āĻ•āϰ⧇āύ āϏ⧇āĻ–āĻžāύ āĻĨ⧇āϕ⧇āχ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ API āĻāĻŦāĻ‚ āĻ“āϝāĻŧ⧇āĻŦ UI āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰ⧁āύāĨ¤
āύāĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύ

āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āĻ¸ā§āĻ•ā§āϰ⧀āύ āĻŦāĻŋāϰāϞ āĻ•āĻžāϰāϪ⧇ āύāϝāĻŧ—āĻāĻ•āϟāĻŋ āĻ•āϞāĻžāĻŽā§‡āϰ āύāĻžāĻŽ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ, āϟāĻžāχāĻĒ āĻŦāĻĻāϞāĻžāύ⧋, āĻŦāĻž āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āφāϚāϰāĻŖ āĻŦāĻĻāϞ⧇ āϝāĻžāĻ“āϝāĻŧāĻžâ€”āĻāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ āĻŦā§āϰ⧇āĻ• āĻšāϝāĻŧāĨ¤ āĻ­āĻŋāωversioning āĻĒā§āϰāĻžāϝāĻŧāχ API-āϰ āĻŽāϤ⧋ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āϚ⧁āĻ•ā§āϤāĻŋ āĻšāĻŋāϏāĻžāĻŦ⧇ āφāϚāϰāĻŖ āĻ•āϰāĻžāϰ āĻŦā§āϝāĻžāĻĒāĻžāϰāĨ¤

āĻāĻ•āϟāĻŋ āύāĻžāĻŽāĻ•āϰāĻŖ āĻ¸ā§āĻ•āĻŋāĻŽ āĻĻāĻŋāϝāĻŧ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āϏāĻŦāĻžāχ āϜāĻžāύ⧇ āĻ•āĻŋāϏ⧇ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰāĻž āύāĻŋāϰāĻžāĻĒāĻĻāĨ¤ āĻ…āύ⧇āĻ• āĻĻāϞ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚-āĻĢ⧇āϏāĻŋāĻ‚ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ rpt_ āĻŦāĻž vw_ āĻĒā§āϰāĻŋāĻĢāĻŋāĻ•ā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤ āϝāĻĻāĻŋ āĻāĻ•āĻžāϧāĻŋāĻ• āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϞāĻžāĻ—āϤ⧇ āĻĒāĻžāϰ⧇, āĻļ⧁āϰ⧁ āĻĨ⧇āϕ⧇āχ āύāĻžāĻŽā§‡āχ āϏ⧇āϟāĻž āϰāĻžāϖ⧁āύ (āωāĻĻāĻžāĻšāϰāĻŖ: vw_sales_v1)āĨ¤

āϝāĻ–āύ āφāĻĒāύāĻžāϕ⧇ āĻāĻ•āϟāĻŋ āĻ­āĻŋāω āĻŦāĻĻāϞāĻžāϤ⧇ āĻšāĻŦ⧇ āϝāĻž āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ āϚāĻžāϞāĻžāϝāĻŧ, āϝ⧋āĻ—āĻĢāϞāĻžāĻ¤ā§āĻŽāĻ• āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϕ⧇ āĻ…āĻ—ā§āϰāĻžāϧāĻŋāĻ•āĻžāϰ āĻĻāĻŋāύāĨ¤ āĻāĻ•āϟāĻŋ āύāĻŋāϰāĻžāĻĒāĻĻ āύāĻŋāϝāĻŧāĻŽ: āϝ⧋āĻ— āĻ•āϰ⧁āύ, āύāĻžāĻŽ āĻŦāĻĻāϞāĻžāĻŦ⧇āύ āύāĻžāĨ¤

  • āύāϤ⧁āύ āĻ•āϞāĻžāĻŽ āϝ⧋āĻ— āĻ•āϰ⧁āύ āĻŦāĻĻāϞ⧇ āĻĒ⧁āϰ⧋āύ⧋āϗ⧁āϞ⧋āϰ āύāĻžāĻŽ āĻŦāĻž āϟāĻžāχāĻĒ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻŦ⧇āύ āύāĻž
  • āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻ•āϞāĻžāĻŽāϗ⧁āϞ⧋āϰ āĻĄā§‡āϟāĻž āϟāĻžāχāĻĒ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āĻāĻĄāĻŧāĻŋāϝāĻŧ⧇ āϚāϞ⧁āύ (āύāϤ⧁āύ āĻ•āϞāĻžāĻŽā§‡ āĻ•āĻžāĻ¸ā§āϟ āĻ•āϰ⧁āύ)
  • āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻ•āϞāĻžāĻŽā§‡āϰ āĻŽāĻžāύ⧇ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āϰāĻžāϖ⧁āύ (āĻāĻ•āϟāĻŋ āĻ•āϞāĻžāĻŽ āύāϤ⧁āύ āωāĻĻā§āĻĻ⧇āĻļā§āϝ⧇ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ āύāĻž)
  • āϝāĻĻāĻŋ āĻāĻŽāύ āϞāϜāĻŋāĻ• āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇ āϝāĻž āĻ•āύāĻŸā§āĻ°ā§āϝāĻžāĻ•ā§āϟāϟāĻŋ āĻĒā§āϰāĻ­āĻžāĻŦāĻŋāϤ āĻ•āϰ⧇, āύāϤ⧁āύ āĻ­āĻŋāω āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ

āϝāĻ–āύ āĻĒ⧁āϰāύ⧋ āϚ⧁āĻ•ā§āϤāĻŋ āĻŦāϜāĻžāϝāĻŧ āϰāĻžāĻ–āĻž āϝāĻžāϝāĻŧ āύāĻž, āύāϤ⧁āύ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ (vw_sales_v2) āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύāĨ¤ āϏāĻžāϧāĻžāϰāĻŖ āĻŸā§āϰāĻŋāĻ—āĻžāϰāϗ⧁āϞ⧋: āχāωāϜāĻžāϰ-āĻĻ⧇āĻ–āĻž āĻĢāĻŋāĻ˛ā§āĻĄā§‡āϰ āύāĻžāĻŽā§‡ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ, āĻ—ā§āϰ⧇āχāύ āĻŦāĻĻāϞāĻžāύ⧋ (āĻāĻ• row per order āĻĨ⧇āϕ⧇ āĻāĻ• row per customer āĻšāϞ⧇), āĻŦāĻž āϟāĻžāχāĻŽāĻœā§‹āύ/āĻŽā§āĻĻā§āϰāĻž āύāĻŋāϝāĻŧāĻŽ āĻŦāĻĻāϞāĻžāύ⧋āĨ¤ āϛ⧋āϟ āĻĢāĻŋāĻ•ā§āϏāϗ⧁āϞ⧋ āϝāĻž āĻ•āĻ¨ā§āĻŸā§āĻ°ā§āϝāĻžāĻ•ā§āϟ āĻšā§‡āĻžā§āϜ āĻ•āϰ⧇ āύāĻž āϏ⧇āϗ⧁āϞ⧋ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤

āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ āĻĻāĻŋāϝāĻŧ⧇ āĻŸā§āĻ°ā§āϝāĻžāĻ• āĻ•āϰ⧁āύ, āĻāĻŽāύāĻ•āĻŋ āϛ⧋āϟ āĻšāϞ⧇ āĻ“āĨ¤ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ āφāĻĒāύāĻžāϕ⧇ āϰāĻŋāĻ­āĻŋāωāϝ⧋āĻ—ā§āϝ āĻĄāĻŋāĻĢ, āϰ⧋āϞāφāωāϟ āĻ…āĻ°ā§āĻĄāĻžāϰ, āĻāĻŦāĻ‚ āϏāĻšāϜ āϰ⧋āϞāĻŦā§āϝāĻžāĻ• āĻĻ⧇āϝāĻŧāĨ¤

āĻĒ⧁āϰāύ⧋ āĻ­āĻŋāω āύāĻŋāϰāĻžāĻĒāĻĻ⧇ āĻĄāĻŋāĻĒā§āϰāĻŋāϕ⧇āϟ āĻ•āϰāϤ⧇: āχāωāĻœā§‡āϜ āĻšā§‡āĻ• āĻ•āϰ⧁āύ, v2 āϚāĻžāϞāĻžāύ, āĻ•āύāĻœā§āϝ⧁āĻŽāĻžāϰāϗ⧁āϞ⧋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύ, āĻ¤ā§āϰ⧁āϟāĻŋ āĻŽāύāĻŋāϟāϰ āĻ•āϰ⧁āύ, āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤ āĻĒāĻ°ā§āϝāĻžāϝāĻŧ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ v1 āϰāĻžāĻ–āĻž, āĻāĻŦāĻ‚ āύāĻŋāĻļā§āϚāĻŋāϤ āĻšāϝāĻŧ⧇ v1 āĻĄā§āϰāĻĒ āĻ•āϰ⧁āύ āϝāĻ–āύ āφāϰ āϕ⧇āω āĻĒāĻĄāĻŧ⧇ āύāĻžāĨ¤

āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āϰāĻžāĻ–āĻžāϰ āϜāĻ¨ā§āϝ: āĻ•āĻ¨ā§āĻŸā§āĻ°ā§āϝāĻžāĻ•ā§āϟ, āĻāϜ āϕ⧇āϏ, āĻ“ āĻĒāĻžāϰāĻŽāĻŋāĻļāύ

āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āĻ­āĻŋāωāϕ⧇ āĻāĻ•āϟāĻŋ āĻ•āĻ¨ā§āĻŸā§āĻ°ā§āϝāĻžāĻ•ā§āϟ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŽāύ⧇ āĻ•āϰ⧁āύāĨ¤ āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ āĻ“ āĻāĻ•ā§āϏāĻĒā§‹āĻ°ā§āϟāϗ⧁āϞ⧋ āύāĻŋāσāĻļāĻŦā§āĻĻ⧇ āĻ•āϞāĻžāĻŽ āύāĻžāĻŽ, āϟāĻžāχāĻĒ, āĻ“ āĻŽāĻžāύ⧇āϰ āĻ“āĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇āĨ¤ āϝāĻĻāĻŋ āφāĻĒāύāĻžāϕ⧇ āϕ⧋āύ⧋ āĻ—āĻŖāύāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻšāϝāĻŧ, āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻ•āϞāĻžāĻŽā§‡āϰ āĻŽāĻžāύ āĻŦāĻĻāϞāĻžāύ⧋āϰ āĻŦāĻĻāϞ⧇ āύāϤ⧁āύ āĻ•āϞāĻžāĻŽ (āĻ…āĻĨāĻŦāĻž āύāϤ⧁āύ āĻ­āĻŋāω āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ) āϝ⧋āĻ— āĻ•āϰ⧁āύāĨ¤

Nulls āĻŸā§‹āϟāĻžāϞ āĻ­āĻžāĻ™āĻžāϰ āύ⧀āϰāĻŦ āĻ‰ā§ŽāϏāĨ¤ āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ SUM āϕ⧋āύāĻ“ āϰ⧋ NULL āĻšāϞ⧇ 120 āĻĨ⧇āϕ⧇ NULL āĻšāϝāĻŧ⧇ āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇, āĻāĻŦāĻ‚ āĻ…ā§āϝāĻžāĻ­āĻžāϰ⧇āϜ āĻŦāĻĻāϞ⧇ āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇ āϝāĻĻāĻŋ āĻ…āύ⧁āĻĒāĻ¸ā§āĻĨāĻŋāϤ āĻŽāĻžāύ āĻāĻ• āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āϜāĻŋāϰ⧋ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ—āĻŖā§āϝ āĻšāϝāĻŧ āĻ“ āĻ…āĻ¨ā§āϝ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āωāĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āĻ­āĻŋāωāϤ⧇ āύ⧀āϤāĻŋāϟāĻŋ āĻāĻ•āĻŦāĻžāϰāχ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰ⧁āύāĨ¤ āϝāĻĻāĻŋ discount_amount āϐāĻšā§āĻ›āĻŋāĻ• āĻšāϝāĻŧ, āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ COALESCE(discount_amount, 0) āϝāĻžāϤ⧇ āĻŸā§‹āϟāĻžāϞ āĻāϟāĻĒāϟ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āύāĻž āĻšāϝāĻŧāĨ¤

āϤāĻžāϰāĻŋāϖ⧇āĻ“ āĻāĻ•āχ āĻļ⧃āĻ™ā§āĻ–āϞāĻž āĻĒā§āϰāϝāĻŧā§‹āϜāύāĨ¤ “āφāĻœâ€ āϕ⧀ āϤāĻž āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰ⧁āύ (āχāωāϜāĻžāϰ āϟāĻžāχāĻŽāĻœā§‹āύ, āϕ⧋āĻŽā§āĻĒāĻžāύāĻŋāϰ āϟāĻžāχāĻŽāĻœā§‹āύ, āĻŦāĻž UTC) āĻāĻŦāĻ‚ āϏ⧇āϟāĻžāχ āĻŽā§‡āύ⧇ āϚāϞ⧁āύāĨ¤ āχāύāĻ•ā§āϞ⧁āϏāĻŋāĻ­ āϰ⧇āĻžā§āϜ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻ¸ā§āĻĒāĻˇā§āϟ āĻĨāĻžāϕ⧁āύāĨ¤ āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ, āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āĻĒāĻ›āĻ¨ā§āĻĻ āĻšāϞ⧋ āĻšāĻžāĻĢ-āĻ“āĻĒ⧇āύ āχāĻ¨ā§āϟāĻžāϰāĻ­āĻžāϞ: created_at >= start AND created_at < end_next_dayāĨ¤

āĻĒāĻžāϰāĻŽāĻŋāĻļāύ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻ•āĻžāϰāĻŖ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āχāωāϜāĻžāϰāϰāĻž āĻĒā§āϰāĻžāϝāĻŧāĻļāχ āϰ⧋ āĻŸā§‡āĻŦāĻŋāϞ āĻĻ⧇āĻ–āĻž āωāϚāĻŋāϤ āύāϝāĻŧāĨ¤ āĻ­āĻŋāω-āĻ āĻāĻ•ā§āϏ⧇āϏ āĻĻāĻŋāύ, āĻŦ⧇āϏ āĻŸā§‡āĻŦāĻŋāϞ āύāϝāĻŧ, āĻāĻŦāĻ‚ āϏāĻ‚āĻŦ⧇āĻĻāύāĻļā§€āϞ āĻ•āϞāĻžāĻŽāϗ⧁āϞ⧋ āĻ­āĻŋāω āĻĨ⧇āϕ⧇ āϰāĻžāϖ⧁āύāĨ¤ āĻāϤ⧇ āϕ⧇āω āύāĻŋāĻœā§‡ āϕ⧋āϝāĻŧ⧇āϰāĻŋ āϞāĻŋāϖ⧇ āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄā§‡āϰ āĻšā§‡āϝāĻŧ⧇ āĻ­āĻŋāĻ¨ā§āύ āϏāĻ‚āĻ–ā§āϝāĻž āĻĒāĻžāĻ“āϝāĻŧāĻžāϰ āϏāĻŽā§āĻ­āĻžāĻŦāύāĻž āĻ•āĻŽā§‡āĨ¤

āĻāĻ•āϟāĻŋ āϛ⧋āϟ āĻŸā§‡āĻ¸ā§āϟāĻŋāĻ‚ āĻ…āĻ­ā§āϝāĻžāϏ āĻŦāĻĄāĻŧ āĻĒā§āϰāĻ­āĻžāĻŦ āĻĢ⧇āϞ⧇āĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧇āϰ āĻĒāϰ⧇ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻ¸ā§āĻĨāĻŋāϰ āϕ⧇āϏ āφāĻŦāĻžāϰ āϚāĻžāϞāĻžāύ: āϕ⧋āύ⧋ āĻĻāĻŋāύ⧇ āĻļā§‚āĻ¨ā§āϝ āϏāĻžāϰāĻŋ (āĻŸā§‹āϟāĻžāϞ 0 āĻšāĻ“āϝāĻŧāĻž āωāϚāĻŋāϤ, NULL āύāϝāĻŧ), āĻŦāĻžāωāĻ¨ā§āĻĄāĻžāϰāĻŋ āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ (āύāĻŋāĻ°ā§āĻŦāĻžāϚāĻŋāϤ āϟāĻžāχāĻŽāĻœā§‹āύ⧇ āĻ āĻŋāĻ• āĻŽāĻŋāĻĻāύāĻžāχāĻŸā§‡), āϰāĻŋāĻĢāĻžāĻ¨ā§āĻĄ āĻŦāĻž āύ⧇āϗ⧇āϟāĻŋāĻ­ āĻāĻĄāϜāĻžāĻ¸ā§āϟāĻŽā§‡āĻ¨ā§āϟ, āĻāĻŦāĻ‚ view-only āĻāĻ•āĻžāϧāĻŋāĻ• āϰ⧋āϞāĨ¤

āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āĻĻā§āϰ⧁āϤ āϰāĻžāĻ–āĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻŋāĻ• āĻ…āĻ­ā§āϝāĻžāϏ

āĻāĻ•āϟāĻŋ āϛ⧋āϟ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āĻĒāĻžāχāϞāϟ āϚāĻžāϞāĻžāύ
āĻāĻ•āϟāĻŋ āĻ­āĻŋāω āĻĨ⧇āϕ⧇ āĻāĻ•āϟāĻŋ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āĻ¸ā§āĻ•ā§āϰ⧀āύ āĻĒā§āϰ⧋āĻŸā§‹āϟāĻžāχāĻĒ āĻ•āϰ⧁āύ, āϤāĻžāϰāĻĒāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧇āϰ āϏāĻ™ā§āϗ⧇ āύāĻŋāϰāĻžāĻĒāĻĻāĻ­āĻžāĻŦ⧇ āωāĻ¨ā§āύāϤ āĻ•āϰ⧁āύāĨ¤
āĻāĻ–āύ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧁āύ

āĻ­āĻŋāω āϕ⧋āύ⧋ āϧ⧀āϰ āϕ⧋āϝāĻŧ⧇āϰāĻŋāϕ⧇ āĻĻā§āϰ⧁āϤ āĻ•āϰ⧇ āύāĻžâ€”āĻĒā§āϰāϧāĻžāύāϤ āĻāϟāĻŋ āϜāϟāĻŋāϞāϤāĻž āϞ⧁āĻ•āĻžāϝāĻŧāĨ¤ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āĻ¸ā§āĻ•ā§āϰ⧀āύāϗ⧁āϞ⧋ āĻĻā§āϰ⧁āϤ āϰāĻžāĻ–āϤ⧇, āφāĻĒāύāĻžāϰ āĻ­āĻŋāωāϕ⧇ āĻāĻ•āϟāĻŋ āĻĒāĻžāĻŦāϞāĻŋāĻ• āϕ⧋āϝāĻŧ⧇āϰāĻŋ āĻšāĻŋāϏ⧇āĻŦ⧇ āϤ⧁āϞ⧁āύ āϝāĻž āĻĄā§‡āϟāĻž āĻŦāĻžāĻĄāĻŧāĻžāϰ āϏāĻ™ā§āϗ⧇ āϏāĻžāĻĨ⧇ āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āĻĨāĻžāĻ•āĻŦ⧇āĨ¤

PostgreSQL-āϕ⧇ āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϏāĻšāϜ āĻ•āϰ⧇ āĻĻāĻŋāύāĨ¤ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰāϗ⧁āϞ⧋ āϝāϤ āϤāĻžāĻĄāĻŧāĻžāϤāĻžāĻĄāĻŧāĻŋ āϏāĻŽā§āĻ­āĻŦ āϰāĻŋāϝāĻŧ⧇āϞ āĻ•āϞāĻžāĻŽā§‡ āϞāĻžāĻ—āĻžāύ⧋ āωāϚāĻŋāϤ, āϝāĻžāϤ⧇ āĻĒā§āĻ˛ā§āϝāĻžāύāĻžāϰ āϜāϝāĻŧ⧇āύ āĻŦāĻžāĻĄāĻŧāĻžāϰ āφāϗ⧇ āϰ⧋ āĻ•āĻŽāĻžāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āϏāĻžāϧāĻžāϰāĻŖ āĻ…āĻ­ā§āϝāĻžāϏ āϝāĻž āϏāĻžāϧāĻžāϰāĻŖ āϧ⧀āϰāϤāĻžāϰ āĻĨ⧇āϕ⧇ āϰāĻ•ā§āώāĻž āĻ•āϰ⧇:

  • āĻĄā§‡āϰāĻžāχāĻ­āĻĄ āĻāĻ•ā§āϏāĻĒā§āϰ⧇āĻļāύāϗ⧁āϞ⧋āϰ āĻŦāĻĻāϞ⧇ āĻŦ⧇āϏ āĻ•āϞāĻžāĻŽāϗ⧁āϞ⧋āϰ āĻ“āĻĒāϰ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ•āϰ⧁āύ (created_at, status, account_id)āĨ¤
  • WHERE-āĻ indexed āĻ•āϞāĻžāĻŽāϗ⧁āϞ⧋āϰ āϚāĻžāϰāĻĒāĻžāĻļ⧇ āĻĢāĻžāĻ‚āĻļāύ āϞāĻžāĻ—āĻžāύ⧋ āĻāĻĄāĻŧāĻžāĻ¨â€”āωāĻĻāĻžāĻšāϰāĻŖ: DATE(created_at) = ... āĻĒā§āϰāĻžāϝāĻŧāχ āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏ āĻŦā§āϞāĻ• āĻ•āϰ⧇; āĻāĻ•āϟāĻŋ āϤāĻžāϰāĻŋāĻ– āϰ⧇āĻžā§āϜ āĻĒā§āϰāĻžāϝāĻŧāχ āĻŦā§āϞāĻ• āĻ•āϰ⧇ āύāĻžāĨ¤
  • JOIN āĻŦāĻŋāĻ¸ā§āĻĢā§‹āϰāϪ⧇āϰ āĻĻāĻŋāϕ⧇ āύāϜāϰ āϰāĻžāϖ⧁āύāĨ¤ āĻ…āύ⧁āĻĒāĻ¸ā§āĻĨāĻŋāϤ join condition āĻāĻ•āϟāĻŋ āϛ⧋āϟ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāϕ⧇ āĻŽāĻŋāϞāĻŋāϝāĻŧāύ⧇āϰ āϏāĻžāϰāĻŋāϤ⧇ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤
  • āϏāĻŽāĻ¸ā§āϝāĻž āϚāĻŋāĻšā§āύāĻŋāϤ āĻ•āϰāϤ⧇ EXPLAIN (āĻāĻŦāĻ‚ āύāĻŋāϰāĻžāĻĒāĻĻ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇ EXPLAIN ANALYZE) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āĻ¨â€”āϏāĻŋāϕ⧋āϝāĻŧ⧇āĻ¨ā§āϏāĻŋāϝāĻŧāĻžāϞ āĻ¸ā§āĻ•ā§āϝāĻžāύ, āĻ–āĻžāϰāĻžāĻĒ āϰ⧋ āĻ…āύ⧁āĻŽāĻžāύ, āĻāĻŦāĻ‚ āϜāϝāĻŧ⧇āύāϗ⧁āϞāĻŋ āϟāĻžāχāĻŽāĻŋāĻ‚ āϕ⧇āĻŽāύ āϤāĻž āĻĻ⧇āĻ–āϤ⧇āĨ¤
  • āĻ¸ā§āĻ•ā§āϰ⧀āύāϕ⧇ āĻŦ⧁āĻĻā§āϧāĻŋāĻŽāĻžāύ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻĻāĻŋāύ (āϤāĻžāϰāĻŋāĻ– āϰ⧇āĻžā§āϜ, āϏ⧀āĻŽāĻž), āĻāĻŦāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰāĻž āχāĻšā§āĻ›āĻžāĻ•ā§ƒāϤāĻ­āĻžāĻŦ⧇ āϤāĻž āĻŦāĻĄāĻŧ āĻ•āϰāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĒāĻžāύāĨ¤

āĻāĻ•āχ āĻ­āĻžāϰāĻŋ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āĻĻāĻŋāύāĻ­āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻšāϞ⧇ materialized view āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰ⧁āύāĨ¤ āĻāϟāĻŋ āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄāϕ⧇ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϟ āĻŽāύ⧇ āĻ•āϰāĻžāϤ⧇ āĻĒāĻžāϰ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϰāĻŋāĻĢā§āϰ⧇āĻļ āĻ–āϰāϚ āĻ“ āĻ¸ā§āĻŸā§āϝāĻžāϞāύ⧇āϏ āφāϛ⧇āĨ¤ āĻŦā§āϝāĻŦāϏāĻžāϝāĻŧ⧇āϰ āϚāĻžāĻšāĻŋāĻĻāĻžāϰ āϏāĻžāĻĨ⧇ āĻŽāĻŋāϞ āϰ⧇āϖ⧇ āϰāĻŋāĻĢā§āϰ⧇āĻļ āĻļāĻŋāĻĄāĻŋāωāϞ āύāĻŋāϝāĻŧ⧁āύ, āĻāĻŦāĻ‚ āĻ¸ā§āĻĒāĻˇā§āϟ āĻ•āϰ⧇ āĻŦāϞ⧁āύ āĻāχ āĻ¸ā§āĻ•ā§āϰ⧀āύ āĻ•āϤāϟāĻž “āϤāĻžāϜāĻžâ€āĨ¤

āϧ⧀āϰ āĻŦāĻž āϭ⧁āϞ āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ āĻ•āϰāĻžāϰ āϏāĻžāϧāĻžāϰāĻŖ āϭ⧁āϞ

āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄā§‡ āĻŸā§āϰāĻžāĻ¸ā§āϟ āĻ­āĻžāĻ™āĻžāϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻĻā§āϰ⧁āϤ āωāĻĒāĻžāϝāĻŧ āĻšāϞ⧋ āĻāϟāĻžāϕ⧇ āϧ⧀āϰ āĻŦāĻž āύ⧀āϰāĻŦ⧇ āϭ⧁āϞ āĻ•āϰ⧇ āĻĢ⧇āϞāĻžāĨ¤ āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ— āϏāĻŽāĻ¸ā§āϝāĻž “PostgreSQL āϧ⧀āĻ°â€ āϏāĻŽāĻ¸ā§āϝāĻžāϰ āĻ•āĻžāϰāϪ⧇ āύāϝāĻŧ—āĻāϗ⧁āϞ⧋ āĻĄāĻŋāϜāĻžāχāύ āϏāĻŽāĻ¸ā§āϝāĻž āϝāĻž āĻŦāĻžāĻ¸ā§āϤāĻŦ āĻĄā§‡āϟāĻž āĻ“ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āφāĻ—āĻŽāύ⧇āϰ āĻĒāϰ⧇ āĻĻ⧇āĻ–āĻž āϝāĻžāϝāĻŧāĨ¤

āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻĢāĻžāρāĻĻ āĻšāϞ⧋ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻļāĻžāϞ “āϏāĻŦāĻ•āĻŋāϛ⧁ āĻ•āĻ°ā§‹â€ āĻ­āĻŋāω āϤ⧈āϰāĻŋ āĻ•āϰāĻžāĨ¤ āĻāϟāĻŋ āϏ⧁āĻŦāĻŋāϧāĻžāϜāύāĻ• āĻŽāύ⧇ āĻšāϝāĻŧ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻ¸ā§āϤ⧃āϤ āϜāϝāĻŧ⧇āύ āĻ¸ā§āϝ⧁āĻĒ⧇ āĻĒāϰāĻŋāĻŖāϤ āĻšāϝāĻŧ āϝāĻž āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ¸ā§āĻ•ā§āϰ⧀āύ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇āĨ¤ āϝāĻ–āύ āĻāĻ•āϟāĻŋ āϟāĻŋāĻŽ āύāϤ⧁āύ āĻŽā§‡āĻŸā§āϰāĻŋāϕ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϜāϝāĻŧ⧇āύ āϝ⧋āĻ— āĻ•āϰ⧇, āϤāĻ–āύ āϏāĻŦāĻžāχ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻ•āĻžāϜ āĻ“ āύāϤ⧁āύ āĻā§āρāĻ•āĻŋ āĻĒāĻžāϝāĻŧāĨ¤

āφāϰāĻ“ āĻāĻ•āϟāĻŋ āϭ⧁āϞ āĻšāϞ⧋ UI āĻĢāϰāĻŽā§āϝāĻžāϟāĻŋāĻ‚ āĻ­āĻŋāωāϤ⧇ āϰ⧇āϖ⧇ āĻĻ⧇āĻ“āϝāĻŧāĻžâ€”āĻ•āύāĻ•ā§āϝāĻžāĻŸā§‡āύ⧇āϟ āĻ•āϰāĻž āϞ⧇āĻŦ⧇āϞ, āĻŽā§āĻĻā§āϰāĻž āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚, āĻŦāĻž “āϏ⧁āĻ¨ā§āĻĻāĻ°â€ āϤāĻžāϰāĻŋāĻ–āĨ¤ āĻāϤ⧇ āϏāĻžāϜāĻžāύ⧋ āĻ“ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ•āϰāĻž āĻ•āĻ āĻŋāύ āĻšāϝāĻŧ āĻāĻŦāĻ‚ āϞ⧋āϕ⧇āϞ-āĻŦāĻžāĻ¨ā§āϧāĻŦ āĻŦāĻžāĻ— āϤ⧈āϰāĻŋ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻ­āĻŋāωāϗ⧁āϞ⧋āϕ⧇āχ āϏ⧁āĻ¸ā§āĻĒāĻˇā§āϟ āϟāĻžāχāĻĒ (āύāĻŽā§āĻŦāĻžāϰ, āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ, āφāχāĻĄāĻŋ) āϰāĻžāϖ⧁āύ, āĻĄāĻŋāϏāĻĒā§āϞ⧇ UI-āϕ⧇ āĻĻāĻŋāύāĨ¤

SELECT * āĻ­āĻŋāωāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϞ⧇ āĻĻ⧇āĻ–āĻŦ⧇āύ āĻāϟāĻž āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āύāĻž āĻšāĻ“āϝāĻŧāĻž āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻ­āĻžāϞ⧋ āϞāĻžāĻ—āϞ⧇āĻ“, āϕ⧇āω āĻŦ⧇āϏ āĻŸā§‡āĻŦāĻŋāϞ⧇ āύāϤ⧁āύ āĻ•āϞāĻžāĻŽ āϝ⧋āĻ— āĻ•āϰāϞ⧇ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āφāĻ•āĻ¸ā§āĻŽāĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻ¸ā§āĻĒāĻˇā§āϟ āĻ•āϞāĻžāĻŽ āϤāĻžāϞāĻŋāĻ•āĻž āĻ­āĻŋāω āφāωāϟāĻĒ⧁āϟāϕ⧇ āĻ¸ā§āĻĨāĻŋāϰ āĻ•āĻ¨ā§āĻŸā§āĻ°ā§āϝāĻžāĻ•ā§āϟ āĻ•āϰ⧇ āϰāĻžāϖ⧇āĨ¤

āϭ⧁āϞ āĻŸā§‹āϟāĻžāϞ āĻĒā§āϰāĻžāϝāĻŧāĻļāχ āϜāϝāĻŧ⧇āύ⧇āϰ āĻĢāϞ⧇ āϏāĻžāϰāĻŋāϗ⧁āϞ⧋ āϗ⧁āĻŖāĻŋāϤ āĻšāĻ“āϝāĻŧāĻžāϰ āĻ•āĻžāϰāϪ⧇ āĻšāϝāĻŧāĨ¤ āĻāĻ•āϟāĻŋ one-to-many JOIN “10 customers” āϕ⧇ “50 rows” āĻ•āϰ⧇ āĻĢ⧇āϞāϤ⧇ āĻĒāĻžāϰ⧇ āϝāĻĻāĻŋ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāϰ⧇āϰ āĻĒāĻžāρāϚāϟāĻŋ āĻ…āĻ°ā§āĻĄāĻžāϰ āĻĨāĻžāϕ⧇āĨ¤

āĻāϟāĻŋ āĻĻā§āϰ⧁āϤ āϧāϰāĻžāϰ āωāĻĒāĻžāϝāĻŧ: āϜāϝāĻŧ⧇āύ⧇āϰ āφāϗ⧇ āĻ“ āĻĒāϰ⧇ āĻ•āĻžāωāĻ¨ā§āϟ āϤ⧁āϞāύāĻž āĻ•āϰ⧁āύ, “many” āĻĒāĻžāĻļāϟāĻŋāϕ⧇ āφāϗ⧇ āĻāĻ—ā§āϰāĻŋāϗ⧇āϟ āĻ•āϰ⧇ āϝ⧋āĻ— āĻ•āϰ⧁āύ, āĻāĻŦāĻ‚ LEFT JOIN-āϰ āĻĒāϰ⧇ āĻ…āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻŋāϤ NULL-āĻāϰ āĻĻāĻŋāϕ⧇ āύāϜāϰ āϰāĻžāϖ⧁āύāĨ¤

Materialized view āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϞ⧇ āϰāĻŋāĻĢā§āϰ⧇āĻļ āϏāĻŽāϝāĻŧāĻ“ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖāĨ¤ āĻļāĻŋāĻ–āϰ⧇āϰ āϏāĻŽāϝāĻŧ āϰāĻŋāĻĢā§āϰ⧇āĻļ āĻ•āϰāϞ⧇ āĻĒāĻĄāĻŧāĻž āϞāĻ• āĻ•āϰ⧇ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇ āĻ“ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āĻ¸ā§āĻ•ā§āϰ⧀āύ āĻšā§āϝāĻžāĻ‚ āĻ•āϰ⧇ āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻļāĻžāĻ¨ā§āϤ āϏāĻŽāϝāĻŧ⧇ āĻļāĻŋāĻĄāĻŋāωāϞāĻ•ā§ƒāϤ āϰāĻŋāĻĢā§āϰ⧇āĻļ āĻŦāĻž concurrent refresh āĻŦ⧇āϛ⧇ āύāĻŋāύ āϝ⧇āĻ–āĻžāύ⧇ āωāĻĒāϝ⧁āĻ•ā§āϤāĨ¤

āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇ āĻ­āĻŋāω āϚāĻžāϞ⧁ āĻ•āϰāĻžāϰ āφāϗ⧇ āĻĻā§āϰ⧁āϤ āĻšā§‡āĻ•āϞāĻŋāĻ¸ā§āϟ

āĻ¸ā§āĻ•ā§āϰāĻŋāύ āϜ⧁āĻĄāĻŧ⧇ āĻŸā§‹āϟāĻžāϞāϗ⧁āϞ⧋ āĻŽā§‡āϞāĻžāύ
āĻāĻ•āϟāĻŋ āĻļ⧇āϝāĻŧāĻžāĻ°ā§āĻĄ āĻ­āĻŋāωāϕ⧇ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ, āĻŸā§‡āĻŦāĻŋāϞ āĻāĻŦāĻ‚ āĻāĻ•ā§āϏāĻĒā§‹āĻ°ā§āĻŸā§‡ āĻŦāĻĻāϞ⧇ āĻĻāĻŋāĻ¨â€”āĻĒā§āϰāϤāĻŋ āĻŦāĻžāϰ āĻŽāĻŋāϞ⧇ āϝāĻžāĻŦ⧇āĨ¤
āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ

āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āĻ­āĻŋāω āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ āĻ“ āϏāĻžāĻĒā§āϤāĻžāĻšāĻŋāĻ• āχāĻŽā§‡āχāϞ⧇āϰ āĻļāĻ•ā§āϤāĻŋ āĻšāϞ⧇, āĻāϟāĻžāϕ⧇ āϛ⧋āϟ āĻĒāĻžāĻŦāϞāĻŋāĻ• API āĻŽāϤ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰ⧁āύāĨ¤

āĻĒā§āϰāĻĨāĻŽā§‡ āĻ•ā§āϞāĻŋāϝāĻŧāĻžāϰāĻŋāϟāĻŋāĨ¤ āĻ•āϞāĻžāĻŽ āύāĻžāĻŽāϗ⧁āϞ⧋ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āϞ⧇āĻŦ⧇āϞ⧇āϰ āĻŽāϤ āĻšāĻ“āϝāĻŧāĻž āωāϚāĻŋāϤ, āĻļ⧁āϧ⧁ āχāĻ¨ā§āϟāĻžāϰāύāĻžāϞ āĻŸā§‡āĻŦāĻŋāϞ āύāĻžāĻŽ āύāϝāĻŧāĨ¤ āχāωāύāĻŋāϟ āϝ⧁āĻ•ā§āϤ āĻ•āϰ⧁āύ āϝ⧇āĻ–āĻžāύ⧇ āĻĻāϰāĻ•āĻžāϰ (amount_cents āĻŦāύāĻžāĻŽ amount)āĨ¤ āϝāĻĻāĻŋ āĻ•āĻžāρāϚāĻž āĻ“ āĻĄā§‡āϰāĻžāχāĻ­āĻĄ āĻĢāĻŋāĻ˛ā§āĻĄ āĻĻ⧁āĻŸā§‹āχ āĻĨāĻžāϕ⧇, āϤāĻž āĻ¸ā§āĻĒāĻˇā§āϟ āĻ•āϰ⧁āύ (status āĻŦāύāĻžāĻŽ status_group)āĨ¤

āϤāĻžāϰāĻĒāϰ āϏāĻ āĻŋāĻ•āϤāĻž āĻ“ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāĻ¨ā§āϏ āĻāĻ•āϏāĻžāĻĨ⧇ āĻšā§‡āĻ• āĻ•āϰ⧁āύ:

  • āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧁āύ āϝ⧇ join keys āĻŦāĻžāĻ¸ā§āϤāĻŦ āϏāĻŽā§āĻĒāĻ°ā§āĻ• āĻĒā§āϰāϤāĻŋāĻĢāϞāĻŋāϤ āĻ•āϰ⧇ (one-to-one āĻŦāύāĻžāĻŽ one-to-many) āϝāĻžāϤ⧇ āĻ•āĻžāωāĻ¨ā§āϟ āĻ“ āϏāĻžāĻŽ āĻ—ā§‹āĻĒāύ⧇ āϗ⧁āĻŖāĻŋāϤ āύāĻž āĻšāϝāĻŧāĨ¤
  • āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧁āύ āϏāĻžāϧāĻžāϰāĻŖ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰāϗ⧁āϞ⧋ āĻŦ⧇āϏ āĻŸā§‡āĻŦāĻŋāϞ⧇āϰ āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏāϝ⧁āĻ•ā§āϤ āĻ•āϞāĻžāĻŽāϗ⧁āϞ⧋āϤ⧇ āĻĒāĻĄāĻŧ⧇ (āϤāĻžāϰāĻŋāĻ–, āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āφāχāĻĄāĻŋ, āĻŸā§‡āĻ¨ā§āϝāĻžāĻ¨ā§āϟ āφāχāĻĄāĻŋ)āĨ¤
  • āϛ⧋āϟ āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāϚāĻŋāϤ āĻĄā§‡āϟāĻžāϏ⧇āĻŸā§‡ āĻŸā§‹āϟāĻžāϞ āϝāĻžāϚāĻžāχ āĻ•āϰ⧁āύ āϝāĻž āφāĻĒāύāĻŋ āĻšāĻžāϤ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧇ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤
  • NULLs āĻ“ āĻāϜ āϕ⧇āϏ (āĻ…āĻĒā§āϰāĻžāĻĒā§āϤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀, āĻĄāĻŋāϞāĻŋāĻŸā§‡āĻĄ āϰ⧇āĻ•āĻ°ā§āĻĄ, āϟāĻžāχāĻŽāĻœā§‹āύ) āϰāĻŋāĻ­āĻŋāω āĻ•āϰ⧇ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāύ āĻ­āĻŋāω āϕ⧀ āφāωāϟāĻĒ⧁āϟ āĻĻ⧇āĻŦ⧇āĨ¤
  • āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ­āĻŋāω āϏ⧇āĻĢāϞāĻŋ āĻŦāĻĻāϞāĻžāĻŦ⧇āύ āϤāĻž āĻ āĻŋāĻ• āĻ•āϰ⧁āύ: āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻ…ā§āϝāĻžāĻĄāĻŋāϟāĻŋāĻ­ āĻ•āϞāĻžāĻŽ, āύāĻž āĻšāϞ⧇ report_sales_v2 āĻŽāϤ⧋ āύāĻžāĻŽāĻŋāϤ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖāĨ¤

Materialized view āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϞ⧇ āϰāĻŋāϞāĻŋāĻœā§‡āϰ āφāϗ⧇ āϰāĻŋāĻĢā§āϰ⧇āĻļ āĻĒā§āĻ˛ā§āϝāĻžāύ āϞāĻŋāϖ⧇ āϰāĻžāϖ⧁āύāĨ¤ āĻ¸ā§āĻŸā§āϝāĻžāϞāύ⧇āϏ āĻ•āϤ⧋āϟāĻž āĻ—ā§āϰāĻšāĻŖāϝ⧋āĻ—ā§āϝ (āĻŽāĻŋāύāĻŋāϟ, āϘāĻŖā§āϟāĻž, āĻĻāĻŋāύ) āϤāĻž āĻ āĻŋāĻ• āĻ•āϰ⧇ āύāĻŋāύ āĻāĻŦāĻ‚ āϰāĻŋāĻĢā§āϰ⧇āĻļ āĻļā§€āĻ°ā§āώ āϏāĻŽāϝāĻŧ⧇ āϞāĻ• āĻ•āϰāĻŦ⧇ āύāĻž āĻ•āĻŋ āύāĻž āϤāĻž āϝāĻžāϚāĻžāχ āĻ•āϰ⧁āύāĨ¤

āĻļ⧇āώ⧇, āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻšā§‡āĻ• āĻ•āϰ⧁āύāĨ¤ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āχāωāϜāĻžāϰāĻĻ⧇āϰ āϏāĻžāϧāĻžāϰāĻŖāϤ read-only āĻĒāĻžāϰāĻŽāĻŋāĻļāύ āĻĻāϰāĻ•āĻžāϰ, āĻāĻŦāĻ‚ āĻ­āĻŋāω āϕ⧇āĻŦāϞāχ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻ•ā§āώ⧇āĻ¤ā§āϰāϗ⧁āϞ⧋ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻŦ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ: āĻāĻ• āĻ­āĻŋāω āĻĻāĻŋāϝāĻŧ⧇ āĻĻ⧁āχāϟāĻŋ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āĻ¸ā§āĻ•ā§āϰ⧀āύ āϚāĻžāϞāĻžāύ⧋

āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ
āĻāĻ•āϟāĻŋ āĻŦāĻĄāĻŧ āĻĻāϞ āĻ›āĻžāĻĄāĻŧāĻžāχ āĻĢāĻžāχāĻ¨ā§āϝāĻžāĻ¨ā§āϏ, āϏ⧇āϞāϏ, āϏāĻžāĻĒā§‹āĻ°ā§āĻŸā§‡āϰ āĻŽāϤ⧋ āχāĻ¨ā§āϟāĻžāϰāύāĻžāϞ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āĻ¨â€”āĻ­āĻŋāωāϗ⧁āϞ⧋ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻšāĻŦ⧇āĨ¤
āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύ

Sales ops āĻĻ⧁āϟāĻŋ āĻ¸ā§āĻ•ā§āϰ⧀āύ āϚāĻžāϝāĻŧ: “Daily revenue” (āĻĻāĻŋāύ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āϚāĻžāĻ°ā§āϟ) āĻāĻŦāĻ‚ “Open invoices” (āϕ⧇ āĻ•āϤ āϟāĻžāĻ•āĻž āĻŦāĻžāĻ•āĻŋ āφāϛ⧇ āĻŸā§‡āĻŦāĻŋāϞ)āĨ¤ āĻĒā§āϰāĻĨāĻŽ āĻĒā§āϰāĻšā§‡āĻˇā§āϟāĻž āĻĒā§āϰāĻžāϝāĻŧāχ āĻĻ⧁āχāϟāĻŋ āφāϞāĻžāĻĻāĻž āϕ⧋āϝāĻŧ⧇āϰāĻŋ āĻšāϝāĻŧ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āχāύāĻ­āϝāĻŧ⧇āϏ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ, āϰāĻŋāĻĢāĻžāĻ¨ā§āĻĄ āĻāĻŦāĻ‚ āϕ⧋āύ āĻ—ā§āϰāĻžāĻšāĻ•āϕ⧇ āĻ—āĻŖā§āϝ āĻ•āϰāĻŦ⧇āĻ¨â€”āĻāϏāĻŦ āĻāĻ•āϟ⧁ āĻ­āĻŋāĻ¨ā§āύāĻ­āĻžāĻŦ⧇ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰ⧇āĨ¤ āĻāĻ• āĻŽāĻžāϏ āĻĒāϰ⧇ āϏāĻ‚āĻ–ā§āϝāĻžāϗ⧁āϞ⧋ āĻŽā§‡āϞ⧇āύāĻžāĨ¤

āϏāĻšāϜ āϏāĻŽāĻžāϧāĻžāύ: āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰāĻž āύāĻŋāϝāĻŧāĻŽāϗ⧁āϞ⧋ āĻāĻ• āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āϰāĻžāϖ⧁āύāĨ¤ āĻ•āĻžāρāϚāĻž āĻŸā§‡āĻŦāĻŋāϞāϗ⧁āϞ⧋ āĻĨ⧇āϕ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύ (āωāĻĻāĻžāĻšāϰāĻŖ: customers, invoices, payments, credit_notes), āϤāĻžāϰāĻĒāϰ āĻāĻ•āϟāĻŋ āĻļ⧇āϝāĻŧāĻžāĻ°ā§āĻĄ āĻ­āĻŋāω āĻĄāĻŋāĻĢāĻžāχāύ āĻ•āϰ⧁āύ āϝāĻž āϞāϜāĻŋāĻ•āϗ⧁āϞ⧋ āύāϰāĻŽāĻžāϞāĻžāχāϜ āĻ•āϰ⧇āĨ¤

āϧāϰāĻž āϝāĻžāĻ• āĻāĻ•āϟāĻŋ āĻ­āĻŋāω āφāϛ⧇ reporting.invoice_facts_v1 āϝāĻž āĻĒā§āϰāϤāĻŋāϟāĻŋ āχāύāĻ­āϝāĻŧ⧇āϏ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϏāĻžāϰāĻŋ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āĻĢāĻŋāĻ˛ā§āĻĄ āĻĻ⧇āϝāĻŧ āϝ⧇āĻŽāύ customer_name, invoice_total, paid_total, balance_due, invoice_state (open, paid, void), āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻāĻ•āĻ• effective_date āϝāĻž āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚āϝāĻŧ⧇āϰ āϜāĻ¨ā§āϝ āϏāĻŽā§āĻŽāϤāĨ¤

āωāĻ­āϝāĻŧ āĻ¸ā§āĻ•ā§āϰ⧀āύ āϤāĻžāϰāĻĒāϰ āĻāĻ•āχ āĻ•āĻ¨ā§āĻŸā§āĻ°ā§āϝāĻžāĻ•ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇:

  • “Open invoices” āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ•āϰ⧇ invoice_state = 'open' āĻāĻŦāĻ‚ balance_due āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āϏāĻžāϜāĻžāϝāĻŧāĨ¤
  • “Daily revenue” date_trunc('day', effective_date) āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āĻ—ā§āϰ⧁āĻĒ āĻ•āϰ⧇ āĻāĻŦāĻ‚ paid amount (āĻ…āĻĨāĻŦāĻž recognized revenue, āϝāĻĻāĻŋ āφāĻĒāύāĻžāϰ āύāĻŋāϝāĻŧāĻŽ āϏ⧇āϟāĻŋ āĻšāϝāĻŧ) āϏāĻŦāĻžāϰ āϝ⧋āĻ— āĻ•āϰ⧇āĨ¤

āϝāĻĻāĻŋ “Daily revenue” āĻāĻ–āύāĻ“ āĻ­āĻžāϰ⧀ āĻšāϝāĻŧ, āĻāĻ•āϟāĻŋ āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧ āĻ¸ā§āϤāϰ āϝ⧋āĻ— āĻ•āϰ⧁āύ: āĻĻāĻŋāύ⧇ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āĻĒā§āϰāĻŋ-āĻāĻ—ā§āϰāĻŋāϗ⧇āϟ āĻ•āϰāĻž āĻāĻ•āϟāĻŋ āϰ⧋āϞāφāĻĒ āĻ­āĻŋāω (āĻ…āĻĨāĻŦāĻž materialized view) āϝ⧇āϟāĻž āφāĻĒāύāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āϤāĻžāϜāĻžāϰāĻŋāϰ āĻļāĻŋāĻĄāĻŋāωāϞ⧇āϰ āĻ“āĻĒāϰ āϰāĻŋāĻĢā§āϰ⧇āĻļ āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤

āϝāĻĻāĻŋ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻŦāĻĻāϞāĻžāϝāĻŧ, reporting.invoice_facts_v2 āϰ⧋āϞ āφāωāϟ āĻ•āϰ⧁āύ v1 āĻĒā§āϞ⧇āϏ⧇ āĻāĻĄāĻŋāϟ āĻ•āϰāĻžāϰ āĻŦāĻĻāϞ⧇āĨ¤ āύāϤ⧁āύ āĻ¸ā§āĻ•ā§āϰ⧀āύāϗ⧁āϞ⧋āϕ⧇ v2-āĻ āĻļāĻŋāĻĒ āĻ•āϰ⧁āύ, āĻĒ⧁āϰāύ⧋ v1-āϕ⧇ āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤ āϏāĻŽāϝāĻŧ āϰāĻžāĻ–āĻž, āϤāĻžāϰāĻĒāϰ āĻŽāĻžāχāĻ—ā§āϰ⧇āϟ āĻ•āϰ⧇ v1 āϰāĻŋāĻŽā§āĻ­ āĻ•āϰ⧁āύāĨ¤

āϏāĻžāĻĢāĻ˛ā§āϝ āĻĻ⧇āĻ–āϤ⧇ āϕ⧇āĻŽāύ āϞāĻžāϗ⧇: āωāĻ­āϝāĻŧ āĻ¸ā§āĻ•ā§āϰ⧀āύ āĻāĻ•āχ āϟāĻžāχāĻŽ āωāχāĻ¨ā§āĻĄā§‹āϰ āϜāĻ¨ā§āϝ āĻŽāĻŋāϞ⧇ āϝāĻžāϝāĻŧ, āϏāĻžāĻĒā§‹āĻ°ā§āϟ āĻĒā§āϰāĻļā§āύ āĻ•āĻŽā§‡ āϝāĻžāϝāĻŧ, āĻāĻŦāĻ‚ āϞ⧋āĻĄ āϟāĻžāχāĻŽ āĻĒā§‚āĻ°ā§āĻŦāĻžāύ⧁āĻŽāĻžāύāϝ⧋āĻ—ā§āϝ āĻĨāĻžāϕ⧇ āĻ•āĻžāϰāĻŖ āĻŦā§āϝāϝāĻŧāĻŦāĻšā§āϞ āϜāϝāĻŧ⧇āύ āĻ“ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āύāĻŋāϝāĻŧāĻŽ āĻāĻ• āĻŸā§‡āĻ¸ā§āϟ āĻ•āϰāĻž āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧ āĻĨāĻžāϕ⧇āĨ¤

āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āϧāĻžāĻĒ: āĻ­āĻŋāωāϕ⧇ āĻāĻ•āϟāĻŋ āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋ āϝ⧋āĻ—ā§āϝ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻĢā§āϞ⧋-āϰ āĻ…āĻ‚āĻļ āĻŦāĻžāύāĻžāύ

āύāĻŋāĻ°ā§āĻŦāĻžāĻšā§āϝ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āφāϏ⧇ āĻŦāĻŋāϰāϞ āĻ…āĻ­ā§āϝāĻžāϏ āĻĨ⧇āϕ⧇: āĻ¸ā§āĻĒāĻˇā§āϟ āϏāĻ‚āĻœā§āĻžāĻž, āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŋāϤ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ, āĻāĻŦāĻ‚ āĻŽā§ŒāϞāĻŋāĻ• āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāĻ¨ā§āϏ āĻšā§‡āĻ•āĨ¤ āϞāĻ•ā§āĻˇā§āϝ āύāϤ⧁āύ SQL āύāϝāĻŧ—āĻ•āĻŽ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āĻŦāĻŋāϜāύ⧇āϏ āϞāϜāĻŋāĻ• āĻŦāĻŋāϚāϞāĻŋāϤ āĻšāĻ“āϝāĻŧāĻžāĨ¤

āύāĻŋāϝāĻŧāĻŽāĻŋāϤ āĻ•āϰ⧁āύ āϕ⧀ āϜāĻŋāύāĻŋāϏ āĻ­āĻŋāωāϰ āĻĻāĻžāĻŦāĻŋ āϰāĻžāϖ⧇āĨ¤ āĻ­āĻžāϞ āĻĒā§āϰāĻžāĻ°ā§āĻĨā§€āϗ⧁āϞ⧋ āĻšāϞ⧋ āϝ⧇āϗ⧁āϞ⧋ āφāĻĒāύāĻŋ āφāĻļāĻž āĻ•āϰ⧇āύ āϏāĻ°ā§āĻŦāĻ¤ā§āϰ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ: āϕ⧋āϰ āĻŽā§‡āĻŸā§āϰāĻŋāĻ• (revenue, active users, conversion), āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰāĻž āĻĄāĻžāχāĻŽā§‡āύāĻļāύ (customer, region, product), āĻāĻŦāĻ‚ āϝ⧇āϕ⧋āύ⧋ āϜāϝāĻŧ⧇āύ āĻĒāĻžāĻĨ āϝāĻž āĻāĻ•āĻžāϧāĻŋāĻ• āϰāĻŋāĻĒā§‹āĻ°ā§āĻŸā§‡ āĻĻ⧇āĻ–āĻž āϝāĻžāϝāĻŧāĨ¤

āĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻĢā§āϞ⧋āϟāĻŋ āϏāĻšāϜ āϰāĻžāϖ⧁āύ:

  • āĻ­āĻŋāω āύāĻžāĻŽāĻ•āϰāĻŖ āϧāĻžāϰāĻžāĻŦāĻžāĻšāĻŋāĻ• āϰāĻžāϖ⧁āύ (āωāĻĻāĻžāĻšāϰāĻŖ: āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚-āĻĢ⧇āϏāĻŋāĻ‚ āĻ­āĻŋāω āϜāĻ¨ā§āϝ rpt_)āĨ¤
  • āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ (create v2, āĻ•āύāĻœā§āϝ⧁āĻŽāĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ, āϤāĻžāϰāĻĒāϰ v1 āĻ…āĻŦāϏāϰ)āĨ¤
  • āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ āĻĻāĻŋāϝāĻŧ⧇ āĻĒāĻžāĻ āĻžāύ, āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞ āĻāĻĄāĻŋāϟ āύāϝāĻŧāĨ¤
  • āĻ•āϞāĻžāĻŽāϗ⧁āϞ⧋āϰ āĻāĻ•āϟāĻŋ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āϟ āϰāĻžāϖ⧁āύ (āĻŽāĻžāύ⧇, āχāωāύāĻŋāϟ, null āύāĻŋāϝāĻŧāĻŽ)āĨ¤
  • āϧ⧀āϰ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āϕ⧋āϝāĻŧ⧇āϰāĻŋāϗ⧁āϞ⧋ āĻŸā§āĻ°ā§āϝāĻžāĻ• āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āύāĻŋāϝāĻŧāĻŽāĻŋāϤ āϰāĻŋāĻ­āĻŋāω āĻ•āϰ⧁āύāĨ¤

āϝāĻĻāĻŋ āφāĻĒāύāĻžāϰ āĻŦāϟāϞāύ⧇āĻ• āĻ¸ā§āĻ•ā§āϰ⧀āύ āĻ“ āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϝāĻŧ āĻšāϝāĻŧ, AppMaster (appmaster.io) āĻĒā§āϰāĻžāϝāĻŧā§‹āĻ—āĻŋāĻ• āĻšāϤ⧇ āĻĒāĻžāϰ⧇: āφāĻĒāύāĻŋ PostgreSQL āĻ­āĻŋāωāϗ⧁āϞ⧋āϕ⧇ āϏāĻ¤ā§āϝ⧇āϰ āĻ‰ā§ŽāϏ āĻšāĻŋāϏ⧇āĻŦ⧇ āϰ⧇āϖ⧇, āϤāĻžāϰāĻĒāϰ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ API āĻ“ āĻ“āϝāĻŧ⧇āĻŦ/āĻŽā§‹āĻŦāĻžāχāϞ UI āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āĻ¨â€”āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ¸ā§āĻ•ā§āϰ⧀āύ⧇ āϜāϝāĻŧ⧇āύ āĻ“ āύāĻŋāϝāĻŧāĻŽ āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋ āύāĻž āĻ•āϰ⧇āĨ¤

āĻāĻ•āϟāĻŋ āϛ⧋āϟ āĻĒāĻžāχāϞāϟ āϚāĻžāϞāĻžāύāĨ¤ āφāϜ āϝ⧇āϟāĻž āĻ•āĻˇā§āϟāĻĻāĻžāϝāĻŧāĻ• āĻāĻ•āϟāĻŋ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āĻ¸ā§āĻ•ā§āϰ⧀āύ āĻŦ⧇āϛ⧇ āύāĻŋāύ, āĻāĻ•āϟāĻŋ āĻ­āĻŋāω āĻĄāĻŋāϜāĻžāχāύ āĻ•āϰ⧁āύ āϝāĻž āĻ¸ā§āĻĒāĻˇā§āϟāĻ­āĻžāĻŦ⧇ āĻŽā§‡āĻŸā§āϰāĻŋāĻ• āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰ⧇, āĻāĻ•āϟāĻŋ āϰāĻŋāϞāĻŋāϜ āϏāĻžāχāϕ⧇āϞ⧇ āĻļāĻŋāĻĒ āĻ•āϰ⧁āύ, āĻāĻŦāĻ‚ āĻĒāϰāĻŋāĻŽāĻžāĻĒ āĻ•āϰ⧁āĻ¨â€”āĻ•āϤāϟāĻž āĻ•āĻŽ āĻĄā§āĻĒā§āϞāĻŋāϕ⧇āϟ āϕ⧋āϝāĻŧ⧇āϰāĻŋ āĻ“ “āϏāĻ‚āĻ–ā§āϝāĻž āĻŽā§‡āϞ⧇ āύāĻžâ€ āĻŦāĻžāĻ— āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

āĻĒā§āϰāĻļā§āύ⧋āĻ¤ā§āϤāϰ

PostgreSQL āĻ­āĻŋāω āĻ•āĻ–āύ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āĻ¸ā§āĻ•ā§āϰ⧀āύ⧇āϰ āϜāĻ¨ā§āϝ āϏāĻ āĻŋāĻ• āĻĒāĻ›āĻ¨ā§āĻĻ?

āĻāĻ•āĻžāϧāĻŋāĻ• āĻ¸ā§āĻ•ā§āϰ⧀āύ āĻāĻ•āχ āϰāĻ•āĻŽ āϜāϝāĻŧ⧇āύ āĻ“ āϏāĻ‚āĻœā§āĻžāĻž āĻŦāĻžāϰāĻŦāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϞ⧇ āĻ­āĻŋāω āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āĻ¨â€”āϝ⧇āĻŽāύ “paid” āĻŦāĻž “active” āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ—āĻŖā§āϝ āĻšāĻŦ⧇āĨ¤ āĻāĻ• āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰāĻž āϞāϜāĻŋāĻ• āĻĨāĻžāĻ•āϞ⧇ āĻŸā§‹āϟāĻžāϞāϗ⧁āϞ⧋ āϏāĻ™ā§āĻ—āϤāĻŋāĻĒā§‚āĻ°ā§āĻŖ āĻĨāĻžāϕ⧇, āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ¸ā§āĻ•ā§āϰ⧀āύ āϤāĻžāϰ āύāĻŋāĻœā§‡āϰ āϛ⧋āϟ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ“ āϏāĻžāϜāĻžāύ⧋āϰ āύāĻŋāϝāĻŧāĻŽ āϝ⧋āĻ— āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻ­āĻŋāω āĻ“ materialized view-āĻāϰ āĻŽāĻ§ā§āϝ⧇ āϕ⧀ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ?

āϏāĻžāϧāĻžāϰāĻŖ āĻ­āĻŋāω āĻšāϞ⧋ āϕ⧇āĻŦāϞ āύāĻžāĻŽāĻ•ā§ƒāϤ āϕ⧋āϝāĻŧ⧇āϰāĻŋ āĻāĻŦāĻ‚ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻĄā§‡āϟāĻž āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧇ āύāĻžāĨ¤ āφāϰ materialized view āĻĄāĻŋāĻ¸ā§āϕ⧇ āϰ⧇āϜāĻžāĻ˛ā§āϟ āϏ⧇āϟ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧇, āϤāĻžāχ āĻĒāĻĄāĻŧāĻž āĻĻā§āϰ⧁āϤ āĻšāϝāĻŧ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĄā§‡āϟāĻž āĻļ⧇āώ āϰāĻŋāĻĢā§āϰ⧇āĻļ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āφāĻĒ āϟ⧁ āĻĄā§‡āϟ āĻĨāĻžāĻ•āĻŦ⧇ āύāĻžāĨ¤

āĻ­āĻŋāω āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻ•āĻŋ āφāĻŽāĻžāϰ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āĻĻā§āϰ⧁āϤ āĻ•āϰāĻŦ⧇?

āύāĻžâ€”āĻāĻ•āϟāĻŋ āĻ­āĻŋāω āύāĻŋāĻœā§‡ āĻĨ⧇āϕ⧇āχ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āĻĻā§āϰ⧁āϤ āĻ•āϰ⧇ āύāĻž, āĻ•āĻžāϰāĻŖ PostgreSQL āĻāĻ–āύāĻ“ āĻŦ⧇āϏ āĻŸā§‡āĻŦāĻŋāϞāϗ⧁āϞ⧋āϰ āĻŦāĻŋāϰ⧁āĻĻā§āϧ⧇ āφāĻ¨ā§āĻĄāĻžāϰāϞāĻžāχāύāĻŋāĻ‚ āϕ⧋āϝāĻŧ⧇āϰāĻŋ āϚāĻžāϞāĻžāϝāĻŧāĨ¤ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāĻ¨ā§āϏ āϏāĻŽāĻ¸ā§āϝāĻž āĻšāϞ⧇ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻ­āĻžāϞ⧋ āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏ, āφāϰ⧋ āϏāĻŋāϞ⧇āĻ•āϟāĻŋāĻ­ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ, āĻŦāĻž āĻĒā§āϰāĻŋ-āĻ•āĻŽā§āĻĒāĻŋāωāĻŸā§‡āĻĄ āϏāĻžāĻŽāĻžāϰāĻŋāϜ (āϝ⧇āĻŽāύ materialized view āĻŦāĻž āϰ⧋āϞāφāĻĒ āĻŸā§‡āĻŦāĻŋāϞ) āĻĻāϰāĻ•āĻžāϰāĨ¤

āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ āĻŽā§‡āχāύāĻŸā§‡āχāύ⧇āĻŦāϞ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āĻ­āĻŋāω āĻĄāĻŋāϜāĻžāχāύ āĻ•āϰāĻŦ?

āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ•āϞāĻžāĻŽ āϰāĻŋāĻĒā§‹āĻ°ā§āĻŸā§‡ āϕ⧀ āĻĻāϰāĻ•āĻžāϰ āĻāĻŦāĻ‚ āϤāĻžāϰ āĻŽāĻžāύ⧇ āϕ⧀, āϏ⧇āϟāĻž āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻ•āϰ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύ, āϤāĻžāϰāĻĒāϰ āϝāϤāϟ⧁āϕ⧁ āĻĻāϰāĻ•āĻžāϰ āϏ⧇āχ āϛ⧋āϟ āϕ⧋āϝāĻŧ⧇āϰāĻŋ āϞāĻŋāϖ⧁āύāĨ¤ āĻļ⧁āϧ⧁ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ, āĻĒ⧁āύāσāĻŦā§āϝāĻŦāĻšāĻžāϰāϝ⧋āĻ—ā§āϝ āϜāϝāĻŧ⧇āύ āĻ“ āĻĄā§‡āϰāĻžāχāĻ­āĻĄ āĻ•ā§āώ⧇āĻ¤ā§āϰāϗ⧁āϞ⧋ āĻ­āĻŋāωāϤ⧇ āϰāĻžāϖ⧁āύ āĻāĻŦāĻ‚ āĻĄāĻŋāϏāĻĒā§āϞ⧇ āĻĢāϰāĻŽā§āϝāĻžāϟāĻŋāĻ‚ āφāϞāĻžāĻĻāĻž āϰāĻžāϖ⧁āύ āϝāĻžāϤ⧇ UI āϏāĻšāĻœā§‡ āϏāĻžāϜāĻŋāϝāĻŧ⧇ āĻĢ⧇āϞāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āϕ⧀āĻ­āĻžāĻŦ⧇ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ āĻ­āĻžāĻ™āĻŦ⧇ āύāĻž āĻāĻŽāύāĻ­āĻžāĻŦ⧇ āĻ­āĻŋāω āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻŦ?

āĻ­āĻŋāωāϕ⧇ āĻāĻ•āϟāĻŋ API āĻ•āĻ¨ā§āĻŸā§āĻ°ā§āϝāĻžāĻ•ā§āϟ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰ⧁āύāĨ¤ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻ•āϞāĻžāĻŽ āϝ⧋āĻ— āĻ•āϰāĻž āύāĻŋāϰāĻžāĻĒāĻĻ; āύāĻžāĻŽ āĻŦāĻĻāϞāĻž āĻŦāĻž āϟāĻžāχāĻĒ āĻŦāĻĻāϞāĻžāύ⧋ āĻĨ⧇āϕ⧇ āĻŦāĻŋāϰāϤ āĻĨāĻžāϕ⧁āύāĨ¤ āϝāĻĻāĻŋ āĻ•āĻ¨ā§āĻŸā§āĻ°ā§āϝāĻžāĻ•ā§āϟ āĻŦāĻĻāϞāĻžāύ⧋ āϞāĻžāϜāϰāĻŋ āĻšāϝāĻŧ, āύāϤ⧁āύ āĻ­āĻŋāĻļāύ āĻŦ⧇āϰ āĻ•āϰ⧁āύ (āϝ⧇āĻŽāύ v2) āĻāĻŦāĻ‚ āϧāĻžāĻĒ⧇ āϧāĻžāĻĒ⧇ āĻ•āύāĻœā§āϝ⧁āĻŽāĻžāϰāϰāĻž āĻŽāĻžāχāĻ—ā§āϰ⧇āϟ āĻ•āϰ⧁āύāĨ¤

āϕ⧀āĻ­āĻžāĻŦ⧇ NULL āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰāĻŦ āϝāĻžāϤ⧇ āĻŸā§‹āϟāĻžāϞ āĻšāĻ āĻžā§Ž āĻĒāĻžāĻ˛ā§āĻŸā§‡ āύāĻž āϝāĻžāϝāĻŧ?

Nulls āύ⧀āϰāĻŦ⧇ āĻŸā§‹āϟāĻžāϞ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϝāĻĻāĻŋ āĻ…āύ⧁āĻĒāĻ¸ā§āĻĨāĻŋāϤ āĻŽāĻžāύ āĻŸā§‹āϟāĻžāϞ⧇ āϜāĻŋāϰ⧋ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ—āĻŖā§āϝ āĻ•āϰāĻž āωāϚāĻŋāϤ, āϤāĻžāĻšāϞ⧇ āĻ­āĻŋāωāϤ⧇ COALESCE(discount_amount, 0) āĻāϰ āĻŽāϤ⧋ āĻ¸ā§āĻĒāĻˇā§āϟ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϰāĻŋāĻĒā§‹āĻ°ā§āĻŸā§‡ āĻŽāĻžāύ⧇āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāĻ•āϰāĻ•āĻŽ āϰāĻžāϖ⧁āύāĨ¤

āϕ⧇āύ āφāĻŽāĻŋ JOIN āϝ⧋āĻ— āĻ•āϰāĻžāϰ āĻĒāϰ⧇ āĻŸā§‹āϟāĻžāϞ āĻŦāĻĄāĻŧ āĻĻ⧇āĻ–āĻ›āĻŋ?

āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāĻ•āϟāĻŋ one-to-many JOIN āĻāϰ āĻ•āĻžāϰāϪ⧇ āϏāĻžāϰāĻŋāϗ⧁āϞ⧋ āĻŦ⧃āĻĻā§āϧāĻŋ āĻĒāĻžāϝāĻŧ āĻāĻŦāĻ‚ āĻŸā§‹āϟāĻžāϞ āĻŦāĻžāĻĄāĻŧ⧇āĨ¤ āϏāĻŽāĻžāϧāĻžāύ: “many” āĻĒāĻžāĻļāϟāĻŋ āφāϗ⧇ āĻāĻ—ā§āϰāĻŋāϗ⧇āϟ āĻ•āϰ⧇ āϝ⧋āĻ— āĻ•āϰ⧁āύ, āĻ…āĻĨāĻŦāĻž āĻāĻŽāύ āϕ⧀ āĻĻāĻŋāϝāĻŧ⧇ JOIN āĻ•āϰ⧁āύ āϝāĻž āωāĻĻā§āĻĻ⧇āĻļā§āϝāĻ—āϤ āĻ—ā§āϰ⧇āχāύ āĻŦāϜāĻžāϝāĻŧ āϰāĻžāϖ⧇ (āϝ⧇āĻŽāύ “āĻĒā§āϰāϤāĻŋ āχāύāĻ­āϝāĻŧ⧇āϏ āĻāĻ•āϟāĻŋ āϏāĻžāϰāĻŋ” āĻŦāĻž “āĻĒā§āϰāϤāĻŋ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāϰ āĻāĻ•āϟāĻŋ āϏāĻžāϰāĻŋ”)āĨ¤

āϕ⧀āĻ­āĻžāĻŦ⧇ āύāĻŋāϰāĻžāĻĒāĻĻāĻ­āĻžāĻŦ⧇ āϤāĻžāϰāĻŋāĻ– āĻĻāĻŋā§Ÿā§‡ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ•āϰāĻŦ āϝāĻžāϤ⧇ āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏ āύāĻˇā§āϟ āύāĻž āĻšā§Ÿ?

āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏ āĻ•āĻžāϜ āĻ•āϰ⧇ āĻāĻŽāύāĻ­āĻžāĻŦ⧇ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ•āϰ⧁āĻ¨â€”indexed āĻ•āϞāĻžāĻŽāϗ⧁āϞ⧋ WHERE-āĻ āĻĢāĻžāĻ‚āĻļāύ āĻĻāĻŋā§Ÿā§‡ āϘāĻŋāϰ⧇ āϰāĻžāĻ–āĻž āύāĻž āĻ­āĻžāϞāĨ¤ āϏāĻžāϧāĻžāϰāĻŖ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ: DATE(created_at) āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āĻŦāĻĻāϞ⧇ āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ āϰ⧇āĻžā§āϜ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏ āĻ•āĻžāĻœā§‡ āϞāĻžāϗ⧇āĨ¤

āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āĻ­āĻŋāωāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ āύāĻŋāϰāĻžāĻĒāĻĻāĻ­āĻžāĻŦ⧇ āĻĒāĻžāϰāĻŽāĻŋāĻļāύ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰāĻŦ?

āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āχāωāϜāĻžāϰāĻĻ⧇āϰ āĻļāĻ°ā§āϤāϏāĻžāĻĒ⧇āĻ•ā§āώ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻĻāĻŋāĻ¨â€”āĻ­āĻŋāω-āϰ āĻ“āĻĒāϰ āĻāĻ•ā§āϏ⧇āϏ āĻĻāĻŋāύ, āĻŦ⧇āϏ āĻŸā§‡āĻŦāĻŋāϞ āύāϝāĻŧ, āĻāĻŦāĻ‚ āĻ­āĻŋāωāϤ⧇ āϕ⧇āĻŦāϞ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻ•āϞāĻžāĻŽāϗ⧁āϞ⧋ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰ⧁āύāĨ¤ āϝāĻĻāĻŋ RLS āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āύ, āϏ⧇āϟāĻŋ āĻĒā§āϰāĻ•ā§ƒāϤ āϰ⧋āϞāϗ⧁āϞ⧋ āĻĻāĻŋāϝāĻŧ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύ āĻ•āĻžāϰāĻŖ āĻ­āĻŋāω āĻ“ JOIN āϜāĻĄāĻŧāĻŋāϤ āĻšāϞ⧇ āφāϚāϰāĻŖ āφāĻļā§āϚāĻ°ā§āϝ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

AppMaster āϕ⧀āĻ­āĻžāĻŦ⧇ PostgreSQL āĻ­āĻŋāω-āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻĢā§āϞ⧋āϤ⧇ āĻĢāĻŋāϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇?

āϝāĻĻāĻŋ āφāĻĒāύāĻžāϰ UI āĻŦāĻŋāĻ˛ā§āĻĄāĻžāϰ āĻŦāĻž API āĻ¸ā§āϤāϰ āĻāĻ•āχ āĻŽā§‡āĻŸā§āϰāĻŋāϕ⧇āϰ āϜāĻ¨ā§āϝ SQL āύāĻ•āϞ āĻ•āϰ⧇, āϤāĻžāĻšāϞ⧇ PostgreSQL āĻ­āĻŋāωāϕ⧇ āϏāĻŋāĻ‚āϗ⧇āϞ āϏ⧋āĻ°ā§āϏ āĻ…āĻĢ āĻŸā§āϰ⧁āĻĨ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āϏ⧇āχ āĻ­āĻŋāωāϗ⧁āϞ⧋āϰ āĻ“āĻĒāϰ āĻ¸ā§āĻ•ā§āϰāĻŋāύ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύāĨ¤ AppMaster āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āφāĻĒāύāĻŋ PostgreSQL āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰ⧇ āĻ­āĻŋāωāϗ⧁āϞ⧋āϕ⧇ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āĻĄā§‡āϟāĻžāϏ⧇āϟ āĻšāĻŋāϏ⧇āĻŦ⧇ āύāĻŋāϝāĻŧ⧇ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āĻāĻŦāĻ‚ āĻ“āϝāĻŧ⧇āĻŦ/āĻŽā§‹āĻŦāĻžāχāϞ āĻ¸ā§āĻ•ā§āϰāĻŋāύ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ, āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ¸ā§āĻ•ā§āϰāĻŋāύ⧇ āϜāϝāĻŧ⧇āύ āĻ“ āύāĻŋāϝāĻŧāĻŽ āĻĒ⧁āύāϰāĻžāϝāĻŧ āϞāĻŋāĻ–āϤ⧇ āĻšāĻŦ⧇ āύāĻžāĨ¤

āĻļ⧁āϰ⧁ āĻ•āϰāĻž āϏāĻšāϜ
āĻ•āĻŋāϛ⧁ āφāĻļā§āϚāĻ°ā§āϝāϜāύāĻ•āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ

āĻŦāĻŋāύāĻžāĻŽā§‚āĻ˛ā§āϝ⧇āϰ āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻž āϏāĻš āĻ…ā§āϝāĻžāĻĒāĻŽāĻžāĻ¸ā§āϟāĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύāĨ¤
āφāĻĒāύāĻŋ āϝāĻ–āύ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻšāĻŦ⧇āύ āϤāĻ–āύ āφāĻĒāύāĻŋ āϏāĻ āĻŋāĻ• āϏāĻĻāĻ¸ā§āϝāϤāĻž āĻŦ⧇āϛ⧇ āύāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎

āĻāĻŦāĻžāϰ āĻļ⧁āϰ⧁ āĻ•āϰāĻž āϝāĻžāĻ•
PostgreSQL āĻ­āĻŋāω āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚-āĻāϰ āϜāĻ¨ā§āϝ: āϏāĻšāϜ āϜāϝāĻŧ⧇āύ, āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āĻ¸ā§āĻ•ā§āϰ⧀āύ | AppMaster