PDA

View Full Version : آموزش: دلیل استفاده از view



saeeedft
پنج شنبه 21 آبان 1388, 23:04 عصر
با سلام، میخواستم ببینم زمانی که ما میتونیم از storeprocedure ها استفاده کنیم استفاده از view چه لزومی داره، اصلا در چه مواقعی باید از view استفاده کنیم؟

حمیدرضاصادقیان
پنج شنبه 21 آبان 1388, 23:43 عصر
سلام.SP یک سری روال ذخیره شده است و وقتی اولین بار اجرا میشه خود sql یک plan برای اون ایجاد میکنه و در دفعات بعدی از همون plan استفاده میکنه تا دوباره sql ، Stop , start بشه. view یک جدول ذخیره شده است. شما وقتی دستورات Select رو به صورت view مینویسی دستوراتی هستند که معمولا ثابت هستند . شما میتونی روی view یک clustered index بذاری و اونو با جداول دیگه join کنی و مانند یک جدول باهاش رفتار کنی.ولی این قابلیتها رو sp نداره. شما یک سری کار خاص درون sp قرار میدی و همیشه همون کارهارو انجام میده. نمیتونی در select اونو شرکت بدی. نمیتونی روش ایندکس بذاری.نمیتونی بایک جدول دیگه join کنی.
موفق باشید

saeeedft
جمعه 22 آبان 1388, 00:08 صبح
نمیتونی در select اونو شرکت بدی
این رو متوجه نمیشم، ینی نمیتونی یه دستور بنویسی که select داشته باشه، اما این کار که میشه

حمیدرضاصادقیان
جمعه 22 آبان 1388, 00:27 صبح
نه.منظورم این نبود برای view میتونی بنویسی.


select * from view1.
[code]
ولی برای spنمیتونی بنویسی
[code]
select * from sp1

که sp1 هم نام stored procedure شماست.باید به صورت exec sp1 فقط صداش کنی.

saeeedft
جمعه 22 آبان 1388, 00:44 صبح
منظور من توی چیز دیگه ای هستش، من در حالت کلی این سوال رو پرسیدم، شما همیشه توی خود sql که sp رو اجرا نمیکنی، ممکنه توی یه زبون برنامه نویسی اونو اجرا کنی، حالا با این فرضیات شما میتونید به جای view از sp هم استفاده کنی، پس این view رو توی چه جاهایی باید به کار برد؟

حمیدرضاصادقیان
جمعه 22 آبان 1388, 00:57 صبح
خوب دوست عزیز.تمام چیزهایی که من گفتم توهرزبان برنامه نویسی صدق میکنه.گفتم view یک جدول ذخیره شده است که از اون مثل یک جدول میتونی استفاده کنی.شما ببین هر قابلیتی یک جدول داره یک view داره.شما میتونی روی فیلدهاش order by بزنی.where بذاری. group by بذاری. ولی این کارهارو روی نتیجه یک sp نمیتونی انجام بدی.

saeeedft
جمعه 22 آبان 1388, 01:04 صبح
درود بر شما دوست عزیز، دقیقا هممینطوره، یعنی view چیزی مستقل از جدول ها نیست، یعنی اگر دادهای اونو تغییر بدیم دادهای جدول هم تغییر میکنند، اما شما یه دستور select رو در نظر بگیر که به صورت sp نوشته شده، حالا ما روی این دستور چرا نمیتونیم where بذاریم؟ اینکار رو که میشه کرد، اصلا گیریم حرف شما هم درست،

شما ببین هر قابلیتی یک جدول داره یک view داره.شما میتونی روی فیلدهاش order by بزنی.where بذاری. group by بذاریاین کارا رو بدون ساخت view هم میشه انجام داد، ینی مستقیم با خود جدول کار کرد، پس نقش این view چیه؟

حمیدرضاصادقیان
جمعه 22 آبان 1388, 01:09 صبح
شما این لینکهارو نگاه کن
http://odetocode.com/Articles/299.aspx
http://www.sqlteam.com/article/indexed-views-in-sql-server-2000

حمیدرضاصادقیان
جمعه 22 آبان 1388, 01:14 صبح
نه.شما داده های view رو نمیتونی تغییر بدی.داده های اون مستقیما از روی جدول خونده میشه.

DataMaster
جمعه 22 آبان 1388, 11:44 صبح
view صرفا یک نمایش از داده ها هست
یکی از مزایای خیلی خوب View برای جداسازی لایه دیتابیس از لایه اپلیکیشن هست که شما View رو توی دیتابیس طراحی میکنی و در هر اتصال اپلیکیشنی قابل استفاده است

مهدی نان شکری
شنبه 23 آبان 1388, 00:04 صبح
نه.شما داده های view رو نمیتونی تغییر بدی.داده های اون مستقیما از روی جدول خونده میشه.

با سلام
من با حرف شما موافق نیستم. ویو یک جدول مجازیه ولی می تونی اونو تغییر بدی و مانند جدول رفتار می کنه.


[ WITH <common_table_expression> [ ,...n ] ]
INSERT
[ TOP ( expression ) [ PERCENT ] ]
[ INTO]
{ <object> | rowset_function_limited
[ WITH ( <Table_Hint_Limited> [ ...n ] ) ]
}
{
[ ( column_list ) ]
[ <OUTPUT Clause> ]
{ VALUES ( { DEFAULT | NULL | expression } [ ,...n ] )
| derived_table
| execute_statement
}
}
| DEFAULT VALUES
[; ]

<object> ::=
{
[ server_name . database_name . schema_name .
| database_name .[ schema_name ] .
| schema_name .
]
table_or_view_name
}
}

saeeedft
شنبه 23 آبان 1388, 01:30 صبح
من با حرف شما موافق نیستم. ویو یک جدول مجازیه ولی می تونی اونو تغییر بدی و مانند جدول رفتار می کنه.
اصلا ویو چیزی جدا از جدولها نسیت، حرفتون کاملا درسته و منم موافقم،مشکل اینه که تو چه جاهایی ازش باید استفاده کنیم و معایب و مزایاش چی هستش
دوستانی که تجربه دارند خواهشا تو بحث شرکت کنند

amin_alexi
شنبه 23 آبان 1388, 09:07 صبح
ببينين يكي از مزاياي استفاده از View يك بار نوشتن اون و چندين بار استفاده كردن از اونه‌!
ميتونه خيلي از جاها خوانايي كد SQL شما رو بالا ببره!
شما چندين نوع محاسبه دارين كه Base همه اونها يك يا چند join و تعدادي فيلد مشترك دارن
حالا شما اگه بخوايين در يك چند Sp اين join ها رو بنويسين كاري رو چند بار بيهوده تكرار كردين و اگه بخواين تغييري در اين joinها انجام بدين بايد تمام SP ها رو تغيير بدين ! ولي اگه در تمام اونها از يك View استفاده كرده باشين فقط همون View مشترك رو تغيير ميدين !
يكي از مزاياي View امكان Index گزاري روي View !
البته نبايد در يك View رو طوري طراحي كرد كه در تمام Query ها فقط از يك View استفاده كرد
چون خيلي جاها به تمام فيلدهاي View احتياج نداريم !

saeeedft
شنبه 23 آبان 1388, 09:16 صبح
شما چندين نوع محاسبه دارين كه Base همه اونها يك يا چند join و تعدادي فيلد مشترك دارن

حالا شما اگه بخوايين در يك چند Sp اين join ها رو بنويسين كاري رو چند بار بيهوده تكرار كردين و اگه بخواين تغييري در اين joinها انجام بدين بايد تمام SP ها رو تغيير بدين
ممنون از توجه شما، اما مگه join هایی که ما میکنیم ثابت هستند؟ مثلا یه وقت ممکنه دوتا جدول جوین بشن و یه وقت ممکنه سه تا؟ اگه در مورد صحبت های بالاییتون که توی نقل قول گذاشتم بیشتر توضیح بدید ممنون میشم

amin_alexi
شنبه 23 آبان 1388, 10:16 صبح
[QUOTE] اما مگه join هایی که ما میکنیم ثابت هستند؟/QUOTE]
من كجا گفتم كه join هايي كه ما مي كنيم ثابت هستند !
ببينين من منظورم اينه كه در برخي موارد كه تعداد join‌هايي كه ما مي زنيم مثل هم هستند و تعداد فيلدهاي اونها مثل هم هستند و اين مدل از join‌ها رو در چند جا استفاده مي كنيم مي تونيم به جاي اونها يك View بنويسيم !
اگه يك جا 2 join داره و يك جا 3 join مسلما اينها با هم متفاوته و نمي تونيم به جاي اونها از يك View استفاده كنيم
اميد وارم متوجه شده باشين !

mehdi.mousavi
شنبه 23 آبان 1388, 12:18 عصر
با سلام، میخواستم ببینم زمانی که ما میتونیم از storeprocedure ها استفاده کنیم استفاده از view چه لزومی داره، اصلا در چه مواقعی باید از view استفاده کنیم؟

سلام.
درسته که میشه همون کاری رو که با VIEW می کنید، با SP ها هم انجام بدید، اما Stored Procedure ها:


نمیتونن بعنوان یک Building Block در Query بزرگتری شرکت کنن.
بعنوان target دستورات Insert، Update و Delete نمیتونن استفاده بشن.

موفق باشید.

ASKaffash
شنبه 23 آبان 1388, 13:07 عصر
سلام
تعریف علمی View :
جدول مجازی از سطرها و ستونهای یک یا چند جدول.
یعنی اینکه در صورتیکه دسترسی وجود داشته باشد هم میتوان حذف / اضافه / تصحیح را انجام داد و تغییرات عینا به جدول مربوطه منعکس میشود (با محدودیت)
از طرفی :
- در ستور Select میتواند ظاهر شود
- هم در Join / SubQuery و ... ظاهر شود
- میتواند ایندکس داشته باشد
- میتواند Trigger داشته باشد (البته با کمی محدودیت)
- از نظر امنیتی با اهمیت است
- ...

saeeedft
شنبه 23 آبان 1388, 22:23 عصر
ببينين من منظورم اينه كه در برخي موارد كه تعداد join‌هايي كه ما مي زنيم مثل هم هستند و تعداد فيلدهاي اونها مثل هم هستند و اين مدل از join‌ها رو در چند جا استفاده مي كنيم مي تونيم به جاي اونها يك View بنويسيم !
ممنون
این شد یه چیزی، این با پست قبلیتون از لحاظ بیان متفاوتر و قابل فهم تر هستش(از نظر من)