আমি ব্যবহারকারীর পক্ষে দামের মধ্যে পণ্য অনুসন্ধান করা সম্ভব করে তুলতে চাই। ব্যবহারকারীর যেকোন মুদ্রা (ইউএসডি, ইইউ, জিবিপি, জেপিওয়াই, ...) ব্যবহার করতে সক্ষম হওয়া উচিত, পণ্য দ্বারা কোন মুদ্রা সেট করা হোক না কেন। সুতরাং, পণ্যের দাম 200 ইউএসডি এবং যদি ব্যবহারকারী 100EUR - 200EUR দামের পণ্যগুলি অনুসন্ধান করে তবে সে এটি খুঁজে পেতে পারে। কীভাবে এটি দ্রুত এবং কার্যকর করা যায়?
আমি এখন পর্যন্ত যা করেছি তা এখানে Here আমি দোকানে price
, currency code
এবং calculated_price
ইউরো (EUR) এ মূল্য ডিফল্ট মুদ্রা যে হয়।
CREATE TABLE "products" (
"id" serial,
"price" numeric NOT NULL,
"currency" char(3),
"calculated_price" numeric NOT NULL,
CONSTRAINT "products_id_pkey" PRIMARY KEY ("id")
);
CREATE TABLE "currencies" (
"id" char(3) NOT NULL,
"modified" timestamp NOT NULL,
"is_default" boolean NOT NULL DEFAULT 'f',
"value" numeric NOT NULL, -- ratio additional to the default currency
CONSTRAINT "currencies_id_pkey" PRIMARY KEY ("id")
);
INSERT INTO "currencies" (id, modified, is_default, value)
VALUES
('EUR', '2012-05-17 11:38:45', 't', 1.0),
('USD', '2012-05-17 11:38:45', 'f', '1.2724'),
('GBP', '2012-05-17 11:38:45', 'f', '0.8005');
INSERT INTO "products" (price, currency, calculated_price)
SELECT 200.0 AS price, 'USD' AS currency, (200.0 / value) AS calculated_price
FROM "currencies" WHERE id = 'USD';
যদি ব্যবহারকারী অন্য মুদ্রার সাথে অনুসন্ধান করে থাকে তবে আসুন ইউএসডি বলুন, আমরা ইউরোতে দাম গণনা করি এবং calculated_price
কলামটি অনুসন্ধান করি ।
SELECT * FROM "products" WHERE calculated_price > 100.0 AND calculated_price < 200.0;
এইভাবে আমরা দামগুলি খুব দ্রুত তুলনা করতে পারি, কারণ আমাদের প্রতিটি সারির জন্য প্রকৃত দাম গণনা করার দরকার নেই, কারণ এটি একবার গণনা করা হয়।
খারাপ জিনিস হ'ল কমপক্ষে প্রতিদিন আমাদের default_price
সমস্ত সারিগুলির জন্য পুনরায় গণনা করতে হবে, কারণ মুদ্রার হার পরিবর্তন করা হয়েছে।
এটি মোকাবেলা করার আরও ভাল উপায় আছে?
অন্য কোন চতুর সমাধান নেই? কিছু গাণিতিক সূত্র হতে পারে? আমার একটি ধারণা আছে যে এটি calculated_price
কিছু পরিবর্তনশীলগুলির সাথে অনুপাত X
এবং যখন মুদ্রা পরিবর্তন হয়, আমরা কেবলমাত্র সেই পরিবর্তনশীলটিকেই আপডেট করি X
, না calculated_price
, তাই আমাদের এমনকি কিছু কিছু (সারি) আপডেট করার দরকার নেই ... সম্ভবত কিছু গণিতবিদ এটি সমাধান করতে পারেন এটার মত?
calculated_price
? আমি কেবলinitial_currency_value
(ধীরে ধীরে মুদ্রার হার নেওয়া হয়, আজ বলা যাক) সংরক্ষণ করতে পারি এবং সর্বদা তার বিপরীতে গণনা করতে পারি! এবং ইউরোতে মূল্য প্রদর্শন করার সময় অবশ্যই আসল মুদ্রার হারের বিরুদ্ধে গণনা করুন। আমি কি সঠিক? বা এমন একটি সমস্যা আছে যা আমি দেখছি না?