نكات و مطالبي در مورد ديتابيس ها ميخوام ...

با سلام 
دوستان من يه سري مطالب و نكات از مبتدي به پيشرفته در مورد ديتابيس ها ميخوام .
يعني مطالبي نظير : ديتا بيس ها چي هستن . كارشون چيه . نحوه استفاده از اونا و ...
دوستان چون اين مطالب قرار است در يه بخش آموزشي قرار بگيره برام خيلي مهمه كه از مبتدي ( پايه )‌ تا حرفه اي ( پيشرفته ) باشه ...
حالا اگه شما يه منبع آموزشي ( سايت فارسي زبان ) و يا ... سراغ داريد ممنون ميشم بهم معرفي كنيد يا مطالب مربوط رو در اين تاپيك بزارين ...

خيلي ممنون ...
 
  • Like
Reactions: !!!

omidak

Active Member
سلام:
خوب کار Database ها ذخیره اطلاعات هست.
هر گونه فایل یا ... که اطلاعاتی رو داخل خود ذخیره کنه میشه گفت که اون یک Database هست.
اما اون کلمه ای که همیشه به گوش میرسه که همه میگن DataBase
این نوع از Database ها توسط برنامه نویسی پیشرفته جهت ذخیره راحت اطلاعات و دریافت اون هست.
Database هایه امروزی میتونند تا حجم خیلی خیلی خیلی بالایی رو در خود ذخیره کنند.
که به طور جدولی کار میکنند
هر Database حاویه Table ( جدول ) هایی هست. و هر جدول داریه تعدادی Column ( سطون )
و Row ( ردیف و یا همون داده ذخیره شده )
مثلاً در یک Database ای تعدادی Table هست که یکی به نام Users هست
درون اون Users چند Column به نامهایه UserName , Name
حالا برایه اظافه هر Row شما یک کاربر به Database اظافه میکنید.
مثلاً به تریب Majid , Alavizade
ساختار Table شبه یه نمونه زیر خواهد شد:
کد:
Table:
______________________________________________________________
Columns:   |         UserName         |         Name         |
______________________________________________________________
Rows(1):   |           Majid          |      AlaviZade       |
Rows(2):   |      shirazpatogh        |    Your Name         |
Rows(3):   |           OmidAK         |      Mafakher        |
______________________________________________________________
در اون نمونه میبینید که کار مشابه به یک فهرست کتاب رو داره باین تفاوت که شما هر چقدر Column خواستید میتونید اظافه کنید به کل اون شکل یک Table گفته میشه و به ردیف اول که با یک خط جدا شده Column ها و به زیر اونها که داده ها هستند Rows.
فکر میکنم تقریباً با ساختار Database آشنا شدید.
حالا یه بحث کوچیکی از طرز استفاده از اون
Database یک زبانی مخصوص به خود داره که به نام SQL شناخته شده و اینجا یه مقدمه ای ازش رو میگیم. :wink: :
یک سری کدها پایه و مورد استفاده هست که در موردش اینجا میگیم:
کد بسایر معروف SQL هست Select که جهت خواندن اطلاعات هست.
درست بعد از Select نام Column هایه مورد نظر قرار میگیره به این صورت:
کد:
Select UserName, Name
اما این کد کامل نیست ما باید Table رو نیز مشخص کنیم برایه مشخص کردن Table هر کلمه کلیدیه From استفاده میکنیم و بلافاصله بعد از اون نام Table مانند زیر:
کد:
Select UserName, Name From Users
خروجیه این برنامه به صورت زیر خواهد شد:
کد:
UserName - Name
__________________
Majid - Alavizade
shirazpatogh - YourName
OmidAK - Mafakher
حتماً میخواهید کدهایه بیشتری رو بدونید مثلاً خواندن User مورد نظر
برایه جستجو باید از کلمه کلیدیه Where استفاده کنید به این صورت:
کد:
Select UserName, Name From Users Where UserName = 'Majid'
حالا خروجی برنامه به این صورت میشه:
کد:
UserName - Name
_________________
Majid - Alavizade
یک نکته>
برایه گرفتن تمامیه Column ها میتونید از کد * استفاده کنید مانند ربرو:
کد:
Select * From Users Where UserName = 'Majid'
خوب اگر خواستید مشابه به یک کلمه رو جستجو کنید باید به صورت زیر کد رو وارد کنید و از کلمه کلیدیه Like استفاده کنید:
کد:
Select * From Users Where UserName Like 'Maj%'
خروجیه این برنامه به صورت زیر است:
کد:
UserName - Name 
________________
Majid - Alavizade
علامت % برایه شما مشابه هات رو در اون قصمت از کلمه پیدا میکن
مثلا Maj% یعنی هر چی که با Maj شروع بشه
حالا اگر این کد رو وارد کنید خروجیه برنامه به صورت زیر خواهد شد:
کد:
Select * From Users Where UserName Like '%ID%'
خروجی:
UserName - Name
_________________
Majid - Alavizade
OmidAK - Mafakher
خوب این ابتدایی در مورد دریافت اطلاعات از یک Database بود.
اما برایه اظافه کردن یک داره ( Row ):
برایه این کار از کلمه کلیدی Insert استفاده میشه مانند نمونه زیر:
کد:
Insert Into Users(UserName, Name) Values('OxygenWS', 'Motaghi')
اگر دقت کنید بعد از نام Table پرانتز باز شده و نام Column ها در اون قرار دارند و بعد از بسته شدن پرانتز کلمه کلید Values که داده ها رو در بر میگیره و به خاطر داشته باشید که باید به تریبی که در پرانتز اول دادید . داده ها رو وارد کنید
در حال خاظر Table Users حوایه یک کابر جدید با نام کاربریه جدید هست:
کد:
Select * From Users
خروجی:
UserName - Name
___________________
Majid - Alavizade
OmidAK - Mafakher
shirazpatogh -  YourName
OxygenWS - Motaghi
یک کد دیگه هم برایه به روز رسانی هم میگیم و فکر کنم تا اینجا کافی باشه :wink:
برایه به روز رسانی از کلمه کلیدیه UpDate استفاده میشه
مانند نمونه روبرو:
کد:
UpDate Users Set Name = 'NewName', UserName = 'NewUserName' Where UserName = 'shirazpatogh'
میبینید که بعد از کلمه کلیدیه Update نام Tableو بعد از اون کلمه کلیدیه Set قرار دارد
و بعد از اون نام Column و بعد از = داده جدید قرار دارد. و مابین Column ها , قرار دارد در انتها نیز کلمه Where که نشان میدهد کدوم Row رو مورد تغییرات جدید قرار بده.
حالا table ما به روز شده اگر خروجی Users رو به گیریم به این صورت خواهد شد:
کد:
Select * From Users
خروجی:
UserName - Name
_________________
Majid - Alavizade
NewUserName - NewUserName
OmidAK - Mafakher
OxygenWS - Motaghi
امیدوارم که بدرد خورده باشه.
باز هم برمیگردم و چیزهایه دیگه هم اظافه میکنم :wink:
 
عزيز راضي به زحمت شما نبودم ...
ولي خيلي عالي بود .
بنظر شما از اين تكميل تر هم ميشه ؟
منتظر مطالب كامل و بهتر شما هستم ...

خيلي ممنون اميد جان
 

omidak

Active Member
سلام:
خواهش ميكنم قابلي نداشت.
بقه اش هم تا فردا ميفرستم :wink:
 
  • Like
Reactions: !!!

omidak

Active Member
سلام:
خوب گفتم بيام و چند تا ديگه هم بگم. :wink: :
خوب برايه Delete کردن نیز باید از کلمه کلیدیه Delete استفاده کنیم به این صورت:
کد:
Delete From Users Where UserName = 'OmidAK'
میبینید که بعد از کلمه کلیدی Delete بلافاصله From که نشاندهنده Table هست آمده و Where که جهت مشخص کردن Row هست.
پس خروجی برنامه به این صورت خواهد شد:
کد:
UserName - Name
__________________
Majid - Alavizade
shirazpatogh - YourName
OxygenWS - Motaghi
تا الانه 4عمل اصلی رو یاد گرفتید خواندن ، نوشتن ، به روز کردن و حذف.

حالا یه پله میریم بالاتر:

حالا اگر بخواهیم در هنگام خواندن داده ها اونها رو مرتب کنیم.
کلمه کلیدی برایه این کار هست با نام Order By
که به این صورت کار میکند
کد:
Select * From Users Order By Name
خروجی:
UserName - Name
_____________________
Majid - Alavizade
OmidAK - Mafakher
OxygenWS - Motaghi
shirazpatogh - YourName
همه رو به ترتیب حروف الفبا مرتب کرد.
خوب حالا دو کلمه " و " " یا " _ And Or
این کلمات معمولاً در Where مورد استفاده قرار میگیره
مانند نمونه روبرو:
کد:
Select * From Users Where UserName = 'Majid' Or Name = 'Motaghi'
خروجی:
UserName - Name
_________________
Majid - Alavizade
OxygenWS - Motaghi
******************************
Select * From Users Where UserName = 'Majid' And Name = 'Alavizade'
خروجی
UserName - Name
__________________
Majid - Alavizade
حالا اگر خواستید که یک نمونه ای رو جستجو کنید که تعداد زیادی شرط داشته باشه
باید از کلمه کلیدیه IN استفاده شود مانند کد زیر:
کد:
Select * From Users Where UserName In ('Majid', 'OxygenWS')
خروجی:
UserName - Name
________________
Majid - Alavizade
OxygenWS - Motaghi

و اما بریم یه خورده سر ساخت Table صحبت کنیم.
برایه این کار شما باید از کلمه کلیدیه Create و بعد از اون Table جهت ساخت Table استفاده کنید مانند روبرو:
کد:
Create Table Posts(PostTitle nvarchar(50), PostText text, ByUser nvarchar(30))
حالا یک Table داریم با نام Post که دارایه 3 Column هست با نامهایه PostTitle , PostText ByUser
بعد از Create Table کلمه کلیدیه Posts که نام Table هست قرار دارد و بعد از اون داخل پرانتز اول نام Column وبعد DataType مثلاً nvarchar که داده String هست و بعد داخل پرانتز طول داده مثلا 50 که بیشتر از 50 حرف را قبول نمیکند. و Text که یک داده بسیار بزرگ هست.
حالا اگر بخواهیم 2 Table را در اشتراک بگزاریم مثلاً:
اگر در Table Postsداشته باشیم :
کد:
PostTitle - PostText - ByUser
____________________________
Salam Doostan - Test - Majid
Faghat Linux - Linux - OxygenWS
Faghat Windows - Windows - OmidAK
از این کد برایه به اشتراک گزاشتن استفاده میکنیم:
کد:
Select U.UserName, U.Name, P.PostTitle, P.PostText From Users As U Inner Join Posts As P On U.UserName = P.ByUser
خروجی به این صورت خواهد بود:
UserName - Name - PostTitle - PostText
______________________________________________
Majid - Alavizade - Test - Salam Doostan
OxygenWS - Motaghi - Linux - Faghat Linux
OmidAK - Mafakher - Windows - Faghat Windows
اگر دقت کنید میبینید که بعد از From نام Table با As به نام موقت تبدیل شدن مانند Users به U و Posts به P
کلمه Inner Join دو Tableرا طوری با هم درمیامیزد که هر دو طرف عضو اشتراکی داشته باشد ( نمونه هایه دیگه در ارسال بعدی ) و بعد از اون کلمه On که نشان میدهد کدامین Column ها با هم در اشتراک باشند که در اینجا ByUser از Table Postsو UserName رو از Users انتخاب کردیم
و خروجیه برنامه به آن صورت شد که مشاهده کردید.
خوب دوباره تا اینجا باشه بقیه اش هم بعداً میام میگم :wink:
 

Majid

مدیر سایت
عضو کادر مدیریت
اميد جان خيلي عالي بود..
ميتون سر جمعش كني و بصورت مقاله به من بديشون آقا


مجيد
 

omidak

Active Member
سلام:
چشم آقا مجيد فقط قكر كنم 1 يا 2 قسمت اش مونده بنويسم بعد HTML میدم خدمتون :wink:
 
بابا اي والله به اميد ...
مثله اينكه يه همچين مطالبي واقعا لازم بوده ...
 

omidak

Active Member
سلام:
خوب قسمت سوم:
تا بخش Inner Join رو گفتیم حالا Left و Right Join
همون طوری که گفتم در Inner Join هر دو Table باید عضو اشتراکی داشته باشند.
حالا اگر بخواییم یک طرف از Table ها اگر عضو اشتراکی نداشت نیز نمایش داده شود از Left یا Right استفاده میکنیم به این صورت:
کد:
Select U.UserName, U.Name, P.PostTitle, P.PostText From Users As U Left Join Posts As P On U.UserName = P.ByUser 
خروجی به این صورت خواهد بود: 
UserName - Name - PostTitle - PostText 
______________________________________________ 
Majid - Alavizade - Test - Salam Doostan 
OxygenWS - Motaghi - Linux - Faghat Linux 
OmidAK - Mafakher - Windows - Faghat Windows 
shirazpatogh - YourName - -
میبنید که از Left استفاده شده که نشانهنده این است که طرف چپ عضو اشتراکی را مشخص میکند. و اگر طرف سمت چپ و راست رو عوض کردید باید از Right استفاده کنید. :wink:

حالا Between که مابین دو Row هر چی که بود رو میگیره و نمایش میده. که به این صورت کار میکند:
کد:
Select * From Users Where Name Between 'Alavizade' And 'Motaghi'
خروجی:
UserName - Name
____________________
Majid - Alavizade
OmidAK - Mafakher
در مورد As یک صحبت کوچیکی کردیم . اما اگر شما خواستید برایه نمایش نام Column و یا Table را چیز دیگری نمایش بدید یا به فرض اگر 2 یا چند Table را Join کردید و دیدید که چند Column هم نام دارند برایه اسم گزاری میتوانید از As استفاده کنید به صورت زیر:
کد:
Select UserName As UserID, Name As Family From Users Where Family = 'Alavizade'
خروجی:
UserID - Family
__________________
Majid - Alavizade
یکی از کارهایه Create رو گفتیم که ساخت Table بود یکی دیگر از کارهایه اون ساخت یک Database جدید هست:
کد:
Create Database MajidOnline_PHPBB
الانه یک Database جدید با نام MajidOnline_PHPBB داریم.

همچنین جهت حذف اونها باید از کلمه کلیدیه Drop استفاده کنیم:
کد:
Drop Table Users

Drop Database MajidOnline_PHPBB
خط اول Table و خط دوم Database رو حذف میکند.
همچنین جهت اضافه کردن یا حذف یک Column از کد Alter استفاده میشود. مانند روبرو:
کد:
Alter Table Users Add ID int IDENTITY (1, 1) NOT NULL
Alter Table User Drop ID
خط اول جهت ساخت Column هست که بعد از Alter Table نام Table و بعد کلمه Add جهت اضافه کردن و بعد نام Column و بعد از اون DataType . که int نشانه از عدد صحیح هست و این Column فقط عدد خواهد گرفت. اما اگر دقت کنید میبینید که بعد از اون IDENTITY هست که به معنیه این است که فقط خواندنی هست و ما کاربر اجازه دست کاری را ندارد و بعد داخل پرانتز عدد اول نشانه این است که در صورت خالی بودن به اون عدد 1 رو بدهد و عدد دوم به معنایه این است که به طور خود کار با اضافه شدن هر Row یک شماره به شماره قبلی اضافه کند و در Row قرار دهد که به این کار AutoNumber میگویند و بعد از اون نیز Not Null که اجازه نمیدهد داده خالی قرار بگیرد و حتماً باید یک عددی در اون Row و اون Column قرار داشته باشد.
نگته ==> اگر به این سایت دقت کنید میبنید که هر نامه یک شماره دارد( تمامیه نامه ها و جوابها ) این کار بطور خود کار با همین سیستم AutoNumber انجام میگیرد. اما به خاطر داشته باشید که اگر یک نامه یا یک Row حذف شود هیچ وقط AutoNumber شماره حذف شده را مورد استفاده قرار نمیدهد.
و اما خط دوم نیز عمل حذف اون Column را انجام میدهد.

حالا Group By:
این عمل جهت دسته کردن مشابه هات انجام میشه. که معمولاً جهت Archive نمایش دادن استفاده میشه
اما اینجا میخواییم جهت نمایش میانگین ازش استفاده کنیم
به فرض که یک Table با نام Vote داشته باشیم با 2 Column با نامهایه Address و Rate
و دارایه ریکردهایه زیر هست:
کد:
Address - Rate
__________________________
MajidOnline - 100
Barnamenevis - 10
Barnamenevis - 3
MajidOnline - 80
MajidOnline - 60
Barnamenevis - 20
MajidOnline - 200
حالا میخواییم ببینیم که کدوم از همه امتیاز بیشتری گرفته:
کد:
Select Address, Sum(Rate) As TotalSum From Vote Group By Address
خروجی:
Address - Rate
____________________
MajidOnline - 540
Barnamenevis - 33
و اما Select Into که جهت Copy گرفتن استفاده میشه. به این صورت که خواهید دید:
کد:
Select * Into Backup_Posts From Posts
الانه یک Table با نام Backup_Posts داریم که یک Copy از Posts هست.
اما این تمامیه کدهایی که تا الان گفته شد تا اینجا کار خواهند کرد مثلاً اگر بخوایید تمامیه ارسالهایی که توسط کاربر Majid ارسال شده رو بگیرید:
کد:
Select PostTitle, PostText Into Post_By_Majid From Posts Where ByUser = 'Majid'
همچنین شما میتونید این کار رو در یک Database دیگر انجام دهید مانند زیر:
کد:
Select * Into Posts In 'BackUpDB' From Posts
و همچنین Select Top نیز تعدادی از Row ها رو میگیرد مانند:
کد:
Select Top 2 * From Users
خروجی:
UserName - Name 
____________________
Majid - Alavizade
OmidAK - Mafakher
و اما Function ها که خیلی کارا برایه ما انجام میدهند:
مثلاً گرفتن آخرین Recorde یا تعداد کل یا میانگین یا زمان و خیلی چیزهایه دیگه
به کد زیر دقت کنید:
کد:
Select Count(*) From Posts
این نمایش میدهد که چه تعداد Recorde در Posts وجود دارد.
نمونه دیگر:
کد:
Select *, (Select Count(*) From Posts Where ByUser = Users.UserName) As TotalPosts From Users
خروجی:
UserName - Name - TotalPosts
_____________________________
Majid - Alavizade - 3
OmidAK - Mafakher - 1
OxygenWS - Motaghi - 5
shirazpatogh - YourName - 0
Function دیگر Sum که مجموع تمامی هست. دیگری AVG که میانگین رو میگیرد. Max آخرین Row و Min اولین رو میگیرد ( در Access کد Last و First کار مشابه Max Min رو میکنند )
GetDate زمان را به شما میدهد
تعداد زیادی Function هست که در جاهایه مختلف به کار میایند.

خوب تا اینجا میتونید به صورت نصبتاً مبتدی برنامه هایی تحت Database بنویسید.
امید وارم که تا اینجا تونسته باشم کمک کرده باشم تا شما دوستان بتونید به راحتی از Database استفاده کنید و در صفحه هات خود از اون استفاده کنید.
اما اگر باز اطلاعات بیشتری نیز خواستید میتونم تا حدی کمک کنم مثلاً ساخت Function ها و PROCEDURE و ...
:wink:
 

omidak

Active Member
سلام:
ببخشيد دوستان آخرين كدي كه ارسال كردم در آخرين ارسال يك اشكال كوچيك داشت:
کد:
Select *, (Select * ...
تبديل شد به:
Select *, (Select Count(*) .....
 
  • Like
Reactions: !!!
خب شما كه حالا همه ي اينها رو گفتيد(و دستتون درد نكنه) ميشه يك اموزش ديگه هم بديد؟
مثلا يك صفحه داريم (يك صفحه form)
چگونه اطلاعات در اون صفحه رو به يك ديتابيس ارتباط بديم(منتقل و ذخيره كنيم).... ؟
 

omidak

Active Member
سلام:
حالا شما برايه اين كار احتياج به برنامه نويسي داريد.
كه 2 زبان خيلي معروف برايه اين كار هست ASP و PHP
در مورد ASP و ASP.Net میتونم کمک اتون کنم. در مورد PHP هم دوست عزیزمون امید ( Oxygenws )
حالا شما کدوم زبان رو میخواهید؟
:wink:
 
  • Like
Reactions: !!!
از اونجا كه asp رو هر سروري ساپورت نميكنه فكر كنم php بهتر باشه!(اگه از هر دو راه هم بگيد كه عالي ميشه) حالا تصميم نهايي با خودتون ....
 
  • Like
Reactions: !!!

omidak

Active Member
سلام:
در مورد ASP.net به این صورت :wink: :
کد:
Dim Conn As New SqlConnection("ConnectionString Here")
Dim Comm As New SqlCommand("Select * From Users", Conn)
Dim DRs As SqlDataReader
Conn.Open()
DRs = Comm.ExecuteReader()
Do While DRs.Read()
   Response.Write(DRs("UserName"))
   Response.Write(" - ")
   Response.Write(DRs("Name"))
   Response.Write("<Br>")
Loop
DRs.Close()
Conn.Close()
 

oxygenws

Active Member
سلام،
امیدک عزیز بهم گفتند که اینورا بوی PHP میاد!!! من هم خودمو رسوندم تا.....

اول یه اتصال ایجاد می کنید:
کد:
$con = mysql_connect('localhost', 'username', 'password');
بعد پایگاه داده رو مشخص می کنید:
کد:
$db = mysql_select_db('dbname');
بعد می تونی یک query بفرستی. این کویری می تونه هر کویری مجاز mysql باشه.
کد:
$result = mysql_query('select * from table where x=y');
و اگر کویری شما نتیجه ای داشت، یعنی مقداری در $result قرار می گرفت. دستور زیر برای خارج کردن نتایج استفاده می شه:
کد:
$res = mysql_fetch_assoc($result);
اگر خروجی mysql_query چندین سطر داشته، خط بالا رو چندین بار تو یک حلقهء while اجرا کن.
----
این هم برای بستن پایگاه داده
کد:
mysql_close($con);

موفق باشید، امید
 

جدیدترین ارسال ها

بالا