PDA

View Full Version : تعریف ستونی که مقادیرش روزهای هفته باشد



mojtaba.baghban
شنبه 22 بهمن 1390, 13:53 عصر
سلام
با توجه به نبود enum ذر sql برای داشتن ستونی که مقادیرش روزهای هفته هستند آیا باید جدولی برای روزهای هفته در نظر گرفت و در جداول دیگر برای داشتن ستونی که مقادیرش روزهای هفته است از فارین کی استفاده کرد یا راه بهتری وجود دارد؟
با تشکر

in_chand_nafar
شنبه 22 بهمن 1390, 14:08 عصر
دوست عزيز براي راهنمايي دقيق تر بهتر در صورت امكان ساختار جدول خودتون را اينجا قرار بدهيد و در صورت امكان صورت مسئاله را كمي بشكافيد
آيا در جدول شما تاريخ ذخيره شده و قصد استخراج روز را داريد؟
آيا .....؟
اين طوري كه شما با اين صورت مسئاله نوشتيد جواب هموني است كه خودتون نوشتيد يك جدول روزهاي هفته (كد، عنوان روز) در جداول فرزند هم كافي است با اين جدول ارتباط برقرار بشه. به نظر من اين حالت اصلا ساختار خوبي نيست (البته بستگي با ساختار جدول و... دارد)
اگر در جدول خودتون تاريخ را ذخيره كنيد (بهتر به شكل ميلادي باشه) و بعد در موقع Select با تبديل اون به شمسي با استفاده از CLR مي تويند به راحتي روز هفته را هم بدست آوريد در صورتيكه ححجم داده شما هم بالا است بهتر يك فيلد از نوع Computed Column به شكل Persisted به جدول تون اضافه كنيد
موفق باشيد

mojtaba.baghban
شنبه 22 بهمن 1390, 14:31 عصر
روزهای هفته رو مثال زدم برای یک فیلذ چند مقداری این سوال برای ماه های سال مدارک دانشگاهی و ... وجود دارد. آیا در جول اصلی این فیلد را به عنوان رشته در نظر بگیرم که احتمالا جامعیت داده ها از بین می‌رود که باید برای هر درجی مقادیر وارد شده را چک کرد یا روش دیگر اینکه این فیلد را tinyint در نظر بگیریم ویا روش دیگر که همان استفاده از جدول دیگر و استفاده از کلید خارجی از نقطه نظر جامعیت داده‌ها و سرعت پایگاه داده کدام روش مناسب تر است؟
با تشکر از توجهتون

in_chand_nafar
شنبه 22 بهمن 1390, 15:40 عصر
كليد خارجي كنيد راحت تر است جامعيت داده ها هم حفظ مي شود اما در مورد سرعت
قطعا كوئري هايي كه لازم داريد بايد (حداقل) نام هفته و.... را به شكل String به شما نشان بده
بهتر است كه از دو جدول استفاده كنيد
مثال
جدول نام هفته
1- كد هفته PK
2- عناوين هفته

جدول خريد
1- ID
2- كد هفته FK
3- و....
اين دو جدول صرفا براي مثال بوده و...
اما در مورد Performance بايد اين رو در نظر داشته باشي كه بيشترين درخواست براي Perf معمولا توي Selectها است پيشنهاد من اين است كوئري هاي خود را تهيه و آناليز Perf رو روي اون انجام بدين ....

baktash.n81@gmail.com
یک شنبه 23 بهمن 1390, 08:38 صبح
سلام

البته در مورد روز هفته که نیازی نیست .... توابع مربوط به تاریخ رو بررسی کنید ...

در مورد تبدیلشون به فارسی هم می تونید هاردکد کنید ... روزهای هفته ثابت هستند ...

اما در خصوص سایر موارد می تونید کلید خارجی استفاده کنید ...

در بعضی حالات طراحی سیستم ها به خاطر بازدهی ممکنه ... علاوه بر کلید خارجی مقدار رو هم به جدول اصلی اضافه کنید ... البته مواردش خاصه

mahan.2002
پنج شنبه 27 بهمن 1390, 02:25 صبح
سلام

البته در مورد روز هفته که نیازی نیست .... توابع مربوط به تاریخ رو بررسی کنید ...

در مورد تبدیلشون به فارسی هم می تونید هاردکد کنید ... روزهای هفته ثابت هستند ...

اما در خصوص سایر موارد می تونید کلید خارجی استفاده کنید ...

در بعضی حالات طراحی سیستم ها به خاطر بازدهی ممکنه ... علاوه بر کلید خارجی مقدار رو هم به جدول اصلی اضافه کنید ... البته مواردش خاصه

با سلام میشه در مورد هاردکد توضیح بدید ؟

baktash.n81@gmail.com
شنبه 29 بهمن 1390, 09:01 صبح
خوب
شماره روز هفته رو می تونید با این دستور بدست بیارید ...

select datepart(dayofweek,getdate())


بعد تو برنامتون یه تابع ایجاد می کنید که این عدد رو به یه اسم مثل شنبه تبدیل کنه ... به این روش می گن هاردکد کردن ... یعنی شما این تبدیل اطلاعات رو توی کد انجام می دی ... و اگه بخوای تغییری ایجاد کنی باید دوباره برنامه رو compile کنی ...

linux
شنبه 29 بهمن 1390, 19:15 عصر
سلام
با توجه به نبود enum ذر sql برای داشتن ستونی که مقادیرش روزهای هفته هستند آیا باید جدولی برای روزهای هفته در نظر گرفت و در جداول دیگر برای داشتن ستونی که مقادیرش روزهای هفته است از فارین کی استفاده کرد یا راه بهتری وجود دارد؟
با تشکر
روزهای هفته چیزی نیستند که تغییر کنند در کشور ما از حدود 4-5 هزار سال پیش به این ور هفته هفت روز بوده و از حدود هزار سال به اینور هم اسمش همین شنبه و... جمعه بوده، آخرین باری که روزهای هفته به هم ریخت و عوض شد حدود 220 سال پیش در فرانسه بود که روزهای هفته ده روز شد، (http://en.wikipedia.org/wiki/French_Republican_Calendar)شما در سمت دیتابیس نوع ستون را از tinyint بگیرید در سمت برنامه enum تعریف کنید و به حسب نیاز خودتان شروع هفته را از 1 یا صفر در نظر بگیرید در در سمت سرور از constarin ها استفاده کنید تا اجازه ندید مثلا مقداری بالاتر از 7 در این ستون ذخیره بشود. همین