আমি একটি অ্যাপ্লিকেশন উত্তরাধিকার সূত্রে পেয়েছি যা সাইটের সাথে বিভিন্ন ধরণের ক্রিয়াকলাপ সংযুক্ত করে। প্রায় 100 টি বিভিন্ন ক্রিয়াকলাপের ধরণ রয়েছে এবং প্রত্যেকের 3-10 ক্ষেত্রের সেট আলাদা হয়। তবে, সমস্ত ক্রিয়াকলাপে কমপক্ষে একটি তারিখের ক্ষেত্র রয়েছে (তারিখ, শুরুর তারিখ, শেষ তারিখ, নির্ধারিত সূচনার তারিখ, ইত্যাদি) এবং কোনও দায়িত্ববান ব্যক্তি ক্ষেত্র থাকতে পারে। অন্যান্য সমস্ত ক্ষেত্র ব্যাপকভাবে পরিবর্তিত হয় এবং একটি শুরু তারিখের ক্ষেত্রটি অগত্যা "শুরুর তারিখ" বলা হবে না।
প্রতিটি ক্রিয়াকলাপের জন্য একটি উপ-টাইপ টেবিল তৈরি করার ফলে 100 টি বিভিন্ন ধরণের টাইপযুক্ত স্কিমা তৈরি হবে, যা মোকাবেলা করতে খুব অনস্বীকার্য। এই সমস্যার বর্তমান সমাধান হ'ল কী-মান জোড়া হিসাবে ক্রিয়াকলাপের মানগুলি সংরক্ষণ করা। পয়েন্টটি পেরিয়ে যাওয়ার জন্য এটি বর্তমান সিস্টেমের একটি বৃহত সরলিকৃত স্কিমা।
প্রতিটি ক্রিয়াকলাপে একাধিক অ্যাক্টিভিটিফিল্ড থাকে; প্রতিটি সাইটে একাধিক ক্রিয়াকলাপ রয়েছে এবং সাইটঅ্যাক্টিভিটি ডেটা টেবিল প্রতিটি সাইটঅ্যাক্টিভিটির জন্য কেভিপিগুলি সঞ্চয় করে।
এটি (ওয়েব-ভিত্তিক) অ্যাপ্লিকেশনটিকে কোডের পক্ষে খুব সহজ করে তোলে কারণ আপনার সত্যিকারের যা যা করা দরকার তা হল প্রদত্ত ক্রিয়াকলাপের জন্য সাইটঅ্যাক্টিভিটি ডেটাতে রেকর্ডগুলি লুপ করে প্রতিটি ফর্মের জন্য প্রতিটি সারির জন্য একটি লেবেল এবং ইনপুট নিয়ন্ত্রণ যুক্ত করুন। তবে প্রচুর সমস্যা রয়েছে:
- সত্যতা খারাপ; ক্রিয়াকলাপের সাথে সম্পর্কিত নয় এমন সাইটঅ্যাক্টিভিটি ডেটাতে এমন কোনও ক্ষেত্র স্থাপন করা সম্ভব এবং ডেটাওয়ালু একটি বার্চর ক্ষেত্র, সুতরাং সংখ্যা এবং তারিখগুলি ক্রমাগত কাস্ট করা প্রয়োজন।
- এই ডেটাটির রিপোর্টিং এবং এড-হক জিজ্ঞাসা করা কঠিন, ত্রুটির প্রবণ এবং ধীর। উদাহরণস্বরূপ, একটি নির্দিষ্ট ব্যাপ্তির মধ্যে একটি শেষ তারিখ রয়েছে এমন একটি নির্দিষ্ট ধরণের সমস্ত ক্রিয়াকলাপের তালিকা পাওয়ার জন্য পিভট এবং কাস্টিং বার্যাচারের তারিখের প্রয়োজন। প্রতিবেদন লেখকরা এই স্কিমাকে ঘৃণা করেন, এবং আমি তাদের দোষ দিই না।
সুতরাং আমি যা খুঁজছি তা হল প্রচুর পরিমাণে ক্রিয়াকলাপের সঞ্চয় করার একটি উপায় যা প্রায় কোনও ক্ষেত্র নেই সাধারণভাবে রিপোর্ট করা সহজ করে তোলে। আমি এ পর্যন্ত যা নিয়ে এসেছি তা হল এক্সএমএল ব্যবহার করে ক্রিয়াকলাপের ডেটাটি সিউডো-নুএসকিউএল ফর্ম্যাটে সঞ্চয় করতে:
ক্রিয়াকলাপ সারণীতে প্রতিটি ক্রিয়াকলাপের জন্য এক্সএসডি থাকবে, যাতে ক্রিয়াকলাপ ফিল্ড সারণির প্রয়োজনীয়তা দূর হয়। সাইটের ক্রিয়াকলাপে কী-মান এক্সএমএল থাকবে তাই কোনও সাইটের প্রতিটি ক্রিয়াকলাপ এখন একক সারিতে থাকবে।
কোনও ক্রিয়াকলাপ এ জাতীয় কিছু দেখায় (তবে আমি এটি পুরোপুরি সজ্জিত করি নি):
<SomeActivityType>
<SomeDateField type="StartDate">2000-01-01</SomeDateField>
<AnotherDateField type="EndDate">2011-01-01</AnotherDateField>
<EmployeeId type="ResponsiblePerson">1234</EmployeeId>
<SomeTextField>blah blah</SomeTextField>
...
সুবিধাদি:
- এক্সএসডি এক্সএমএলকে বৈধতা দেবে, ডাটাবেস স্তরে একটি নম্বর ক্ষেত্রে একটি স্ট্রিং রাখার মতো ত্রুটিগুলি ধরা, এমন কিছু যা পুরানো স্কিমা দ্বারা অসম্ভব যেটি বার্চারে সমস্ত কিছু সঞ্চিত করে।
- ওয়েব ফর্মগুলি তৈরি করতে ব্যবহৃত কেভিপিগুলির রেকর্ডসেটটি সহজেই ব্যবহার করে পুনরুত্পাদন করা যেতে পারে
select ... from ActivityXML.nodes('/SomeActivityType/*') as T(r)
- এক্সএমএলের একটি এক্সপথ সাবকিউরি একটি ফলাফল সেট তৈরি করতে ব্যবহার করা যেতে পারে যার মধ্যে পিভট ব্যবহার না করে শুরুর তারিখ, শেষের তারিখ ইত্যাদির জন্য কলাম রয়েছে something
select ActivityXML.value('.[@type=StartDate]', 'datetime') as StartDate, ActivityXML.value('.[@type=EndDate]', 'datetime') as EndDate from SiteActivity where...
এটি কি একটি ভাল ধারণা বলে মনে হচ্ছে? এত বড় সংখ্যক আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদাمانર پراলে এমন এক নম্বর সংখ্যক আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা সংখ্যক বৈশিষ্ট্য রয়েছে I আমার আর একটি ধারণা ছিল যে বিদ্যমান স্কিমা রাখা এবং এটি একটি ডেটা গুদামে আরও সহজে জিজ্ঞাস্যযোগ্য কিছুতে অনুবাদ করা হয়েছিল, তবে আমি এর আগে কখনও স্টার স্কিমা ডিজাইন করি নি এবং কোথা থেকে শুরু করব সে সম্পর্কে আমার কোনও ধারণা নেই।
অতিরিক্ত প্রশ্ন: আমি যদি কোনও ট্যাগটি এক্সএসডি ব্যবহার করে একটি তারিখের ডেটা টাইপ হিসাবে সংজ্ঞায়িত করি xs:date
, এসকিউএল সার্ভার এটির তারিখের মান হিসাবে সূচকে চলেছে? আমি উদ্বিগ্ন যদি আমি তারিখ অনুসারে জিজ্ঞাসা করি তবে এটির জন্য তারিখের স্ট্রিংটিকে একটি তারিখের মান দিতে হবে এবং কোনও সূচক ব্যবহারের কোনও সুযোগ ফুঁকতে হবে।