PDA

View Full Version : راه ابتکاری برای تبدیل تاریخ میلادی به شمسی



hasanain
سه شنبه 28 تیر 1390, 06:08 صبح
این مطلب را اینجا (http://blog.afsharm.com/2011/07/sql-server.html)خواندم، گفتم شاید برای شما هم جالب باشد:

بعضی وقت‌ها چیزهایی می‌بینم که حیف می‌آید برای دوستانم تعریف نکنم. یکی از این چیزها دیتابیس و سیستمی بود که امروز با چشم‌های خودم دیدم.
در دیتابیس فوق‌الذکر برای تبدیل تاریخ میلادی به تاریخ شمسی از یک جدول ۵۱ هزار رکوردی استفاده شده بود. این جدول دو ستون داشت. یکی تاریخ میلادی و دیگری تاریخ شمسی. اولین رکورد با ۱۹۰۰٫۱٫۱ و تاریخ معادل شمسی آن شروع می‌شد. هر رکورد بعدی روز بعدی را نشان می‌داد. این روال تا روز میلادی ۲۰۴۱٫۳٫۱۹ و معادل شمسی آن ادامه داشت. حالا خودتان select مربوطه را حدس بزنید!

یوسف زالی
سه شنبه 28 تیر 1390, 10:08 صبح
در ادامه:
این روش هم اکنون توسط خیلی از شرکتها استفاده می شه.
علتها:
سرعت select کردن از اون بیشتر از وقتیه که داریم با محاسبه پیش میریم و این مغایرت وقتی معلوم می شه که جدول ما ردیفهای زیادی داشته باشه.
داده ها مطمئن هستند و ربطی به اشتباه در محاسبات پیدا نمی کنند.

Galawij
سه شنبه 28 تیر 1390, 13:27 عصر
به نظر من که این روش ارزش افزونگی که در بانک اطلاعاتی به وجود میارد را ندارد. می تونیم برای این کار یک تابع بنویسم و بارها در هر DataBase ای ازش استفاده کنیم.

یوسف زالی
سه شنبه 28 تیر 1390, 20:19 عصر
شما امتحان کن ببین برای 500 رکورد چه اختلاف زمانی ایجاد می کنه.
اگر بخواهید شرط رو روی تابع بگذارید و میان 200000 رکورد بگردید چی میشه؟
حالا با join روی روش دوستمون تست کن ببین.
نظرتون عوض میشه.

Galawij
چهارشنبه 29 تیر 1390, 07:50 صبح
شما امتحان کن ببین برای 500 رکورد چه اختلاف زمانی ایجاد می کنه.
اگر بخواهید شرط رو روی تابع بگذارید و میان 200000 رکورد بگردید چی میشه؟
حالا با join روی روش دوستمون تست کن ببین.
نظرتون عوض میشه.
منظورم این بود که دو تابع می نویسیم شمسی به میلادی و بلعکس و در هر لحظه یک تاریخ را به هر کدومش می دیم تا تاریخ بعدی را بگیریم.

ali190
چهارشنبه 29 تیر 1390, 08:44 صبح
به نظر من این روش اصولی نیست که دیتابیسمون در همون ابتدا به ساکن این حجم از رکوردهای رو داشته باشه وقتی این همه فورمول و روش تبدیل RunTime وجود داره

حمیدرضاصادقیان
چهارشنبه 29 تیر 1390, 08:44 صبح
یک راه ساده اش این هست که شما دوتا ستون داشته باشید یکی برای تاریخ میلادی یکی برای شمسی.
یا میتوانید در دیتابیس مستقیما تاریخ شمسی رو ذخیره کنید و هرجایی نیاز شد در برنامه اونو به میلادی تبدیل کنید.
خیلی از تبدیلها نیازی نیست سمت سرور انجام بشه و به سیستم بار اضافی تحمیل کنه.
میشه اینارو به سمت کلاینت منتقل کرد و در زمان نمایش به کاربر اونو به مقدار دلخواه تبدیل کنیم.
معمولا عملیاتی رو به سمت سرور منتقل میکنند که اگر سمت کلاینت باشه باز مجبوره یک سری درخواست ها رو از سمت کلاینت بگیره.
ولی برای تبدیل تاریخ وقتی همه اطلاعات خونده میشه در سطح کلاینت و ارتباط هم دیگه باسرور قطع میشه ، میتوان همین تبدیل رو روی کلاینت انجام داد که بار اضافی هم به سرور تحمیل نشه تا بتوان محاسبات اصلی رو در سرور انجام داد.