PDA

View Full Version : سوال: آیا استفاده از روال ذخیره شده(sp) برنامه را وابسته به بانک اطلاعاتی نمی کند؟



momimomi
دوشنبه 11 شهریور 1392, 23:51 عصر
آیا استفاده از روال ذخیره شده(sp) برنامه را وابسته به بانک اطلاعاتی نمی کند؟
مثلا برای درج ویرایش و ... اگر از sp استفاده کنیم برنامه وابسته به بانک اطلاعاتی نمی شود؟
بهتر نیست برای انجام اعمال فوق از کد نویسی داخل سی شارپ استفاده شود؟

esafb52
سه شنبه 12 شهریور 1392, 00:47 صبح
دوست عزیز این وابسته که میگین یعنی چی؟ شما مگه نمیخوای این کد ها روبرای دیتابیس استفاده کنی؟؟؟؟؟؟؟؟؟؟

amir200h
سه شنبه 12 شهریور 1392, 01:20 صبح
آیا استفاده از روال ذخیره شده(sp) برنامه را وابسته به بانک اطلاعاتی نمی کند؟
مثلا برای درج ویرایش و ... اگر از sp استفاده کنیم برنامه وابسته به بانک اطلاعاتی نمی شود؟
بهتر نیست برای انجام اعمال فوق از کد نویسی داخل سی شارپ استفاده شود؟

خوب اگه دیتابیس نداری پس نیازی هم نه به sp داری نه کدنویسی واسه بانک :لبخند:

veniz2008
سه شنبه 12 شهریور 1392, 01:28 صبح
آیا استفاده از روال ذخیره شده(sp) برنامه را وابسته به بانک اطلاعاتی نمی کند؟
مثلا برای درج ویرایش و ... اگر از sp استفاده کنیم برنامه وابسته به بانک اطلاعاتی نمی شود؟
بهتر نیست برای انجام اعمال فوق از کد نویسی داخل سی شارپ استفاده شود؟
سلام.
منظورتون از وابستگی دقیقا چی هست؟
بهرحال برنامه ای که از بانک اطلاعاتی استفاده میکنه وابسته به سرویس (های) اون بانک اطلاعاتی برای استفاده از داده های ذخیره شده هست.
ولی در کل بحث Stored Procedure ها یکی از بحث های حرفه ای در بخش کار با دیتابیس هست که 3 ویزگی برتر اون در مقایسه با کدنویسی مستقیم به قرار زیر هست :
1. Performance بالاتر : در کدنویسی مستقیم،در هر بار و زمانیکه شما یک دستور sql (همون Tsql ) رو از سمت برنامه (مثلا #C) به سمت دیتابیس می فرستید (یک درخواست مثل لیست همه کالاها). برای به سرانجام رسیدن این درخواست بایستی مراحل زیر انجام بشه :
بعد از انتقال دستور شما (select ، update و ...) از سمت برنامه به سمت سرور (دیتابیس) کارهای زیر هر بار انجام میشه :
a) در سمت سرور ابتدا از لحاظ syntax چک میشه که آیا این دستور قابلیت اولیه برای اجرا شدن رو داره یا نه.
b) در صورت صحت مرحله قبل یک Execute Plan برای دستور شما توسط sql server اختصاص داده میشه.
c) در مرحله بعد دستور مورد نظر کامپایل میشه.
d) در نهایت دستور در سمت سرور، Run (اجرا) میشه.
e) بعد از اجرا، نتیجه کوئری به سمت برنامه کاربردی برگشت داده میشه و ما میتونیم نتیجه کار رو مشاهده کنیم.
اما در Stored Procedure ها مراحل a و b و c یکبار در سمت سرور انجام میشه و این مراحل دیگه برای اون sp تکرار نمیشه. به همین خاطر هست که سرعت Stored procedure ها بیشتر از کدنویسی مستقیم هست (هر چقدر برنامه و کوئری ها پیچیده تر باشه این سرعت بیشتر نمایان میشه).
در کدنویسی مستقیم :

110095

استفاده از Stored Procedure :

110094

2. برنامه نویسی modular (ماژولار) : یک SP یکبار نوشته میشه ولی میتونید اون رو بارها در قسمت های مختلف برنامه (با توجه به نیازتون) صدا بزنید بدون اینکه نیازی به نوشتن چندین باره کدها باشه. خوانایی بالاتری رو هم شاهد خواهیم بود.
3. امنیت بالاتر : شما میتونید کدهای درون یک sp رو رمزنگاری کنید تا کدهای داخل اون قابل مشاهده توسط کاربران نباشه. در این حالت یک کاربر فقط میتونه از اون sp استفاده کنه بدون اینکه دغدغه اینو داشته باشید که به کدهای Tsql شما دسترسی داشته باشه.
همچنین میشه واسه sp ها سطح دسترسی (مجوز) تعریف کرد که فقط افرادی که ما مشخص می کنیم بتونن به اون sp و کدهای درون اون دسترسی داشته باشند.

moeinmohebbi
سه شنبه 12 شهریور 1392, 02:00 صبح
Veniz2008 توضیحات کاملی داد ولی فکر کنم منظور شما چیز دیگه ایه،
آیا منظورت اینه که بانک از بین بره برنامه ناقص بشه؟ (وابستگی وجودی)
اگه قراره برنامه از دیتابیس استفاده کنه فرقی نمیکنه که شما از چه روشی استفاده میکنی، به هرحال نباید دیتابیس و برنامه رو جدا از هم بدونی

maktab
سه شنبه 12 شهریور 1392, 02:02 صبح
فکر کنم منظور ایشون اینکه فرض کنید بخوایم بانک را عوض کنیم و... آنگاه نیازه تمام sp ها رو تبدیل یا دوباره نویسی کنیم. مثلا بانک قبلی sql بوده الان باید از اوراکل استفاده کنیم.

حالا یه سوال! با اومدن EF باز هم نیازه از sp استفاده کنیم؟ بخصوص برای ثبت یه مقادیر ساده و... اصلا مگه EF و Linq دستورات را تحت بانک اجرا نمیکنند؟ خب یه چیزی میشه شبیه همون sp.
ضمنا این وابستگی هم از بین میره.

veniz2008
سه شنبه 12 شهریور 1392, 02:54 صبح
حالا یه سوال! با اومدن EF باز هم نیازه از sp استفاده کنیم؟ بخصوص برای ثبت یه مقادیر ساده و... اصلا مگه EF و Linq دستورات را تحت بانک اجرا نمیکنند؟ خب یه چیزی میشه شبیه همون sp.

گرچه استفاده از sp ها در EF ضروری نیست! ولی stored procedure ها اونقدر قوی هستن که در اکثر کتاب هایی که درباره EF نوشته میشه یک فصل مجزا رو به نحوه استفاده sp ها درون EF اختصاص میدن.
یه موردی که درباره کوئری های نوشته شده با زبان linq وجود داره اینه که این کوئری ها در نهایت باید به دستورات قابل فهم و زبان استاندارد اون پایگاه داده تبدیل بشن. این یعنی انجام دادن یک مرحله کار اضافی ولی مزیت بسیار خوبی هم وجود داره داره. شما یک زبان واحد (linq) رو یاد میگیری و دیگه دغدغه یادگیری دستورات پایگاه داده های مختلف رو ندارید. دیگه نیازی نیست که بدونیم دستور join در اوراکل به چه شکل هست یا در MySQL به چه شکلی هست. فقط کافیه دستور معادل با LINQ اونو بلد باشیم، کار تبدیل رو خود provider مربوطه انجام میده.

ضمنا این وابستگی هم از بین میره.
این یکی از ویژگی های خوب EF هست که همون اسقلال اون از دیتابیس هست.

momimomi
پنج شنبه 14 شهریور 1392, 05:15 صبح
با سلام خدمت تمام دوستان گل, ممنون بابت وقتی که گذاشتین و جواب های مفیدی که ارائه نمودین
بنده جوابمو در 2 پست آخر گرفتم.