PDA

View Full Version : ایجاد constraint با دستور like روی فیلدی که شماره تلفن ذخیره می کند



iman_pc_love
شنبه 15 بهمن 1390, 16:17 عصر
یک فیلد دارم که میخام شماره تلفن ذخیره کنم نوع فیلد varchar(20) خوب حالا می خوایم یه check constraint ایجاد کنم که روی این فیلد فقط ارقام 0 الی 9 به تعداد حداکثر 20 تا ذخیره بشه اینو دستورش چطوری میشه؟
اگه بنویسم like [0-9] خوب این فقط یه کاراکتر باشه قبول میکنه
اگه بخوام [0-9] رو بیست بار بزارم اونوقت فقط رشته های دقیقاً 20 تایی رو قبول می کنه من میخام حداکثر 20 تا باشه
چه باید کرد؟

Galawij
شنبه 15 بهمن 1390, 17:09 عصر
شما چرا از سمت برنامه با یک Validation کنترل نمی کنید که فقط عدد وارد شه؟
قیداش به این صورت درمیاد:
([RoomType] like '%[0-9]%' AND len([RoomType])<=(20) AND len([RoomType])>=(10))

iman_pc_love
شنبه 15 بهمن 1390, 19:21 عصر
از سمت برنامه مشکلی نیست میخاستم از سمت پایگاه داده این کار رو انجام بدم. این کدی که گذاشتید هر رشته ای که حداقل شامل یک کاراکتر عددی باشه قبول می کنه و اشتباه
یه سوال : اصولا وقتی میشه از سمت برنامه با سرعت، کارایی و امکانات بیشتری validation انجام داد، چرا باید constraint ها رو تو دیبایس بگذاریم؟ اصلا چرا همچین امکاناتی تو دیتابیس قرار داده شده؟

Galawij
شنبه 15 بهمن 1390, 20:29 عصر
طول فیلد را از سمت بانک می شه کنترل کرد ولی اینک فقط عدد باشه را روش مناسبی را پیدا نکردم!
چک کردن از سمت برنامه که لازمه ولی از سمت پایگاه داده هم برای احتیاط بیشتر کنترل می شه.

iman_pc_love
شنبه 15 بهمن 1390, 22:55 عصر
به نظرتون اینکه check constraint بزاریم که برای هر بار که اطلاعات قراره edit یا Add بشه بیاد چک کنه درسته یا نه کارائی رو به شدت کاهش نمیده؟ به خصوص برای دیتابیس هایی که قراره یوزرهای متفاوتی به صورت هم زمان بهش دسترسی داشته باشند؟ خوب مگه چه اشکالی پیش میاد ولیدیشن رو سمت برنامه انجام بدیم؟ البته بگذریم که برای محکم کاری می توانیم در هر دو طرف انجام بدیم

iman_pc_love
شنبه 15 بهمن 1390, 23:51 عصر
در ضمن راه حل مسئله رو پیدا کردم not like %^0-9% بگید از کجا؟ رفتم تو سایت ماکروسافت پرسیدم خیلی جالب بود تا به حال این کار رو نکرده بودم فکر کنم کمتر از یک ساعت پاسخش اومد.

iman_pc_love
یک شنبه 16 بهمن 1390, 11:28 صبح
همین سوالی که چرا از ولیدیشن بجای کنسترینت استفاده نمی کنیم هم پرسیدم جوابش اومد، گفتند که برای موارد multi user و تغییرات application کاربرد داره

Galawij
یک شنبه 16 بهمن 1390, 12:14 عصر
ممنونم از اینکه انتقال دانش می کنید، متوجه شدم که باید علم را از منبع اش یاد گرفت نه از جایی که به ما می رسونند...

iman_pc_love
یک شنبه 16 بهمن 1390, 12:56 عصر
من یه تاپیک ایجاد کردم می خاستم ببینم فروم های خارجی هم که مثل اینجا افراد جمع هستند و سوال و جواب می کنند معروف ترینشون کدوماست ولی نمی دونم چی شد که پاکش کردند! به هر حال اونجا افراد از سراسر دنیا هستند و سریع تر به جواب می رسیم. یه دفعه یادم افتاد که چرا نرم از فروم خود ماکروسافت استفاده کنم؟ رفتم اونجا ثبت نام کردم و گفتم حالا بزار برای امتحانم شده یه سوال بپرسم همین طوری الکی، بعد دفعه دیگه که اومدم در کمال نا باوری دیدم جواب سوال حدود یک ساعت بعد از اینکه پرسیده بودم اومده.
به هر حال هرکی زبان انگلیسی می دونه اونجا به نظر من راحت تر و سریع تر به جوابتون میرسید، البته فکر کنم ماکروسافت به افراد مختلف از سراسر دنیا پول میده که بیان فروم ها رو پشتیبانی کنند و جواب سوالات مردم رو بدند. یه بارم یه استادی به من همچین حرفی زد که بعضی ها تو ایران همچین کاری میکنند. و پول خوبی هم می گیرند. نمی دونم چقدر این مسئله حقیقت داره، شما اطلاعی ندارید؟

Galawij
یک شنبه 16 بهمن 1390, 13:15 عصر
صد در صد تو فروم خارجی به جواب سریعتر و بهینه تری می رسیم (البته بعضی از کاربران این سایت حرفه ای هستند).
من خودم سوالاتی را که گیر می کنم از www.SqlTeam.com (http://www.sqlteam.com/) می پرسم. ولی الان که مال مایکروسافت را هم دیدم فوق العاده است(مخصوصاً برای سرویسها).
در مورد اینکه پول می گیرند را نمی دونم ولی فکر نمی کنم این در مورد کاربران این سایت صدق کنه...:متفکر:
موفق باشید.

iman_pc_love
یک شنبه 16 بهمن 1390, 17:32 عصر
نه نه کاربران این سایت که نه ماکروسافت هم که میگم پول میده به خاطر اینه که میخاد از محصولاتش پشتیبانی داشته باشه. من کمپانی های دیگه را ندیدم ولی مطمئنم اونا هم همین کار ها رو میکنند یعنی یه سری افراد هستند که به استخدام در اومدن و کارشون اینه که بیان سولات رو جواب بدند، در واقع نوعی پشتیبانی.