سئوالاتی درباره sql

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
خیلی ممنون استاد.
توی این کد زیر :
کد:
            string conectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=E:\Project\Visual Studio\C#.Net\Saved Project\0 Practice\WinForm\Practice 1\Practice 1\Database1.mdf";
            string commandText = "SELECT * FROM tblPerson";

            using (SqlDataAdapter dataAdapter = new SqlDataAdapter(commandText, conectionString))
            {
                using (DataTable dataTable = new DataTable())
                {
                    dataAdapter.Fill(dataTable);
                    this.dataGridView1.DataSource = dataTable;
                }
            }

هیچ اروری نمیده اما توی شی DataGrideView ام ، فقط فیلدهای جدول ام را نشون میده و رکوردهاش را نشون نمیده (با اونکه جدول دیتابیس ام پر هه و رکورد داره)
مشکلش از کجاست؟

سلام
استاد ، کد مشکلی نداره . مشکل از من ، موقع طراحی جدول بود که با یه جدول دیگه اشتباه گرفتم .
بقیه ی سئوالاتی که پرسیدم را جواب میدین بی زحمت؟
ممنون
 

the_king

مدیرکل انجمن
بعد اینکه برای دیتابیس Sqlite میشه عملیات مربوط به دیتابیس را توسط متد Parallel.Invoke فراخونی و استفاده کرد دیگه؟ یعنی اینکه بجای اینکه در نخ جدید اجرا کنیم ، در این متد اجرا کنیم؟ (ان شاء ا... که در هسته ی جدید اجرا کنه) :)
شاید انجامش برای برنامه تون مزیتی ایجاد نکنه ولی بله، Sqlite پردازش چند نخی و چند پروسه ای رو پشتیبانی می کنه.

بعد اینکه میشه کاری کرد که اطلاعات ، مستقیما از دیتابیس ، توی شی DataGrideView مون بریزه ؟ یعنی اطلاعات توی رم (شی DataTable) ریخته نشه . چون ممکنه جدول مون توی دیتابیس پر حجم باشه (مثلا 2 گیگ حجم اش باشه) اما طرف به اون مقدار ، حافظه ی اصلی نداشته باشه . (البته منظورم این نیست که فیلدها را دونه دونه یا رکورد به رکورد بخونیم مثل DataReader که حجم خیلی کمتری میگیره)
بهترین حالت زمانیه که DataGridView رو بصورت virtual پر کنید، یعنی فقط قسمتی که الان در پنجره اش دیده میشه رو از پایگاه داده بگیرید و نمایش بدید، نه همه داده هایی که در DataGrideView باید نمایش داده بشه.
Implementing Virtual Mode in the Windows Forms DataGridView Control
برای اینجور موارد Select ای که در SQL یا Linq دارید مهمه. اشکال کار در زمانی است که اول بخواهید همه اطلاعات رو از پایگاه داده بیارید در برنامه تون و بعد تازه بخواهید بین شون مواردی رو انتخاب کنید و فیلتر کنید. هر چقدر که فیلتر کردن در سمت پایگاه داده انجام بشه و اطلاعات کمتری به برنامه تون برسه بهتره.
مربوط به سوال شما نیست ولی برای همینه که در Query های پیچیده Stored Procedure کارایی خیلی بهتری داره نسبت به Linq یا حتی دستورات SQL ای که می نویسید، چون داده ها قبل از اینکه به برنامه شما برسن تا حد امکان مراحل فیلتر شدن و ادغام شدن و ... رو در بهترین جایی که سریعترین دسترسی به داده ها هست طی کردن.

بعد اینکه ، ساده ترین کدی که میتونستم توی ADO.Net بنویسم که همه ی اطلاعات را نشون بده ، همین بودم . از این که نمیشه کد رو خلاصه تر کرد . میشه؟
می توانستید از امکانات ویژوال استفاده کنید که دیگه لازم نشه دستی DataTable ای تعریف کنید، الان شما خودتون دستور Select نوشتید و از DataSet ای که Designer میتونست بسازه استفاده نکردید. در حالی که ویژوال استدیو میتونست بر اساس جدول تون خودش یک DataAdapter و DataTable و DataSet بسازه که Select و Update و ... رو هم خودش کد نویسی می کرد و دونه دونه فیلد ها رو هم تعریف میکرد. کد نویسی هم نمیخواست. البته این کدهای آماده برای همه کاربرد ها مناسب نیستند. امکانات ویژوال چه برای DataSet و چه برای Context مناسب پایگاه داده هایی است که از قبل مشخصاتشون رو به پروژه داده اید و ساختار جداول و ... شون مشخص ئه و ثابت میمونه، چون میخواد روی اون DataSet یا Context ای که ساخته حساب باز کنه. وگرنه اگه هی ساختار پایگاه داده و جداول بخواد تغییر کنه دیگه اون کلاس های خودکاری که میسازن پاسخگو نیستن، چون کلاس ها متوجه تغییرات پایگاه داده نیستند و خودشون مدام تغییر کد نمی دهند.

اما توی Entity Framework ، رسیدنِ به همین هدف (هدف در کد بالا) ، اولا نیاز به دستورات sql نداشت و دوما خط هاش کمتر بود و سوما چون شی گرا بود ، درکش بسیار راحت تر بود .
مثال تون نمونه درستی برای مقایسه نیست. شما اگر بخواهید مثال رو با Context که خودکار کد نویسی شده مقایسه کنید باید از DataSet استفاده می کردید که اونم خودش خودکار کد نویسی میشه.
در ضمن شما کد Entity Framework اش رو که ننوشته اید که بخواهید با این مقایسه کنید. بنویسیدش، بعد مقایسه کنید.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
خیلی ممنون استاد
Stored Procedure در SQLite پشتیبانی میشه؟
ضمن اینکه من درباره ی Stored Procedure چیز زیادی نمیدونم . فقط باعث میشه سرعت جستجو و کلا سرعت عملیات در sql و کوئری هاش بالا بره یا اینکه مزیت و نکات دیگه هم داره؟
ظاهرا SQLite انگار دستور Create Procedure را نداره .


بعد اینکه View دقیقا چیه؟
برای زمانی استفاده میشه که از دستور Join استفاده کرده باشیم؟ مثلا دو تا جدول را با دستور Join متصل کنیم و نتیجه اش را در جدولی به عنوان View (که جدول مجازی هست) نشون بدیم؟
همینه فقط یا نکات دیگه ای هم داره؟
 

the_king

مدیرکل انجمن
خیلی ممنون استاد
Stored Procedure در SQLite پشتیبانی میشه؟
چرا برای جواب جستجو نمی کنین؟ جزو قابلیت های استانداردش نیست، اگر بگردید ممکنه راهی برای ذخیره کردنش پیدا کنید ولی همه مزایایی که بصورت کلی یک Stored Procedure داره در SQLite نخواهد داشت.
از اسم SQLite پیداست، قراره Lite باشه، یک سیستم مدیریت پایگاه داده تمام عیار بخواهید SQL Server و Oracle در خدمتتون هستند.

ضمن اینکه من درباره ی Stored Procedure چیز زیادی نمیدونم . فقط باعث میشه سرعت جستجو و کلا سرعت عملیات در sql و کوئری هاش بالا بره یا اینکه مزیت و نکات دیگه هم داره؟
همچین چیزی رو از من نپرسید، بخش Comparison with static SQL رو بخونید :
Stored procedure

ظاهرا SQLite انگار دستور Create Procedure را نداره .
بله. همچین راه حلی به ظاهر هست ولی مزایای کاملش رو طبعا نداره :
Adding Stored Procedures to SQLite
بعد اینکه View دقیقا چیه؟
برای زمانی استفاده میشه که از دستور Join استفاده کرده باشیم؟ مثلا دو تا جدول را با دستور Join متصل کنیم و نتیجه اش را در جدولی به عنوان View (که جدول مجازی هست) نشون بدیم؟
همینه فقط یا نکات دیگه ای هم داره؟
الزامی نیست که حتما نتیجه Join کردنها باشه، ولی به هر حال مثل جدول شامل داده هایی که در خودش ذخیره میشه نیست و همیشه داده ها از پردازش داده هایی خارج از اون View بدست میان.
اصولا شما هر join ای رو فقط به این خاطر که join داره View نمی کنید، اون View به این جهت تعریف شده که نتایجی داره که شما در برنامه به کررات بکار خواهید برد و در ضمن ممکنه فقط برای خواندن هم نباشه، گاهی می خواهید بهش رکورد های جدیدی اضافه کنید، ازش حذف کنید و ...
View میتونه کدی که شما در برنامه برای ارتباط با داده ها می نویسید ساده و خواناتر کنه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
ممنون استاد .
چون بلد نبودم ، پرسیدم .
در واقع میخواستم جریان کلی اش را بدونم که Stored procedure برای چیه تا ببینم به دردم میخوره؟ اگه میخوره ، مبحث شو برای استفاده در SQLite پیگیری کنم .
الان به نظرتون (با توجه به اینکه گفتین Stored procedure ، مزایای کاملش در SQLite نیست) ، من از Stored procedure در SQLite استفاده کنم؟ یا از دستورات SQL در سی شارپ استفاده کنم؟
 

the_king

مدیرکل انجمن
ممنون استاد .
چون بلد نبودم ، پرسیدم .
در واقع میخواستم جریان کلی اش را بدونم که Stored procedure برای چیه تا ببینم به دردم میخوره؟ اگه میخوره ، مبحث شو برای استفاده در SQLite پیگیری کنم .
الان به نظرتون (با توجه به اینکه گفتین Stored procedure ، مزایای کاملش در SQLite نیست) ، من از Stored procedure در SQLite استفاده کنم؟ یا از دستورات SQL در سی شارپ استفاده کنم؟
اگر بخواهید در برنامه ای از پایگاه داده ای که با SQL کار می کنه استفاده کنید، چه SQLite و چه SQL Server و چه Access و ... حتما باید SQL رو یادبگیرید، به همراه همه این مبانی اولیه که در مورد پایگاه داده های مبتنی بر SQL مطرح میشه. یاد گرفتن SQL جزو مبانی کار با پایگاه داده است. مثل هر طراح وب ای که در هر پلتفرم و زبان و گرایشی که کار می کنه به هر حال باید به HTML مسلط باشه. اگر اینجور موارد رو کامل یاد نگیرید و به یکی دو موردش کفایت کنبد یا بد ازش استفاده می کنید یا مزایای مهمی رو از دست میدید.
شما هر زمانی می توانید کد های SQL تون رو با Stored procedure جایگزین کنید، لزومی نداره که از همون اول کار سراغش برید، اینکه مزیت ایجاد میکنه یا نه کاملا بستگی به شرایط پروژه داره و تا پروژه تکمیل نشده سخته در موردش نظر داد.
و خیلی بعیده که به SQL مسلط باشید و در ارتباط با پایگاه داده اصلا از SQL استفاده ای نکنید، چون کاملترین قابلیت های پایگاه داده با SQL تامین میشه و موثر ترین و بهینه ترین Query ها رو با کد SQL میشه نوشت. SQL و Linq کارکرد های مشترکی دارند ولی ذات یکسانی ندارند، همه کارکرد شون در اون بخش مشترک نیست و جایگزین کاملی برای همدیگه محسوب نمیشن.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
اگر بخواهید در برنامه ای از پایگاه داده ای که با SQL کار می کنه استفاده کنید، چه SQLite و چه SQL Server و چه Access و ... حتما باید SQL رو یادبگیرید، به همراه همه این مبانی اولیه که در مورد پایگاه داده های مبتنی بر SQL مطرح میشه. یاد گرفتن SQL جزو مبانی کار با پایگاه داده است. مثل هر طراح وب ای که در هر پلتفرم و زبان و گرایشی که کار می کنه به هر حال باید به HTML مسلط باشه. اگر اینجور موارد رو کامل یاد نگیرید و به یکی دو موردش کفایت کنبد یا بد ازش استفاده می کنید یا مزایای مهمی رو از دست میدید.
شما هر زمانی می توانید کد های SQL تون رو با Stored procedure جایگزین کنید، لزومی نداره که از همون اول کار سراغش برید، اینکه مزیت ایجاد میکنه یا نه کاملا بستگی به شرایط پروژه داره و تا پروژه تکمیل نشده سخته در موردش نظر داد.
و خیلی بعیده که به SQL مسلط باشید و در ارتباط با پایگاه داده اصلا از SQL استفاده ای نکنید، چون کاملترین قابلیت های پایگاه داده با SQL تامین میشه و موثر ترین و بهینه ترین Query ها رو با کد SQL میشه نوشت. SQL و Linq کارکرد های مشترکی دارند ولی ذات یکسانی ندارند، همه کارکرد شون در اون بخش مشترک نیست و جایگزین کاملی برای همدیگه محسوب نمیشن.

خیلی ممنون استاد
پس بی زحمت مزایای کاربردی و موارد استفاده ی Stored procedure رو بهم میگین تا خودم بسنجم بکارم میاد یا نه؟
میخوام توی دیتابیس ام ، مسیر فایل های درایوی که بکاپ گرفته شده را ذخیره کنم .
 

the_king

مدیرکل انجمن
خیلی ممنون استاد
پس بی زحمت مزایای کاربردی و موارد استفاده ی Stored procedure رو بهم میگین تا خودم بسنجم بکارم میاد یا نه؟
میخوام توی دیتابیس ام ، مسیر فایل های درایوی که بکاپ گرفته شده را ذخیره کنم .
در همون لینک ویکی پدیا مزایاشو نوشته، چیزی جز اونها نیست :
  • سربار ارسال دستور SQL به سیستم مدیریت پایگاه داده رو نداره، پس فرمان های SQL داخلش سریعتر از دستوراتی که شما در برنامه تون با SQL می نویسید اجرا میشه. (Linq که از هر دوشون کند تر ئه)
  • چون داده ها در خود پایگاه داده پردازش میشن نیاز به انتقال همه داده های اولیه به سمت برنامه شما نیست و ترافیک داده ای کمتری داره (مزیت عمده ای برای پایگاه داده تحت شبکه و اینترنت ئه، ولی در پایگاه داده محلی هم بی تاثیر نیست)
  • مدیریت داده و کد برنامه رو ساده تر می کنه و چون سیستم مدیریت پایگاه داده از داده تحت نظارت خودش بهتر محافظت میکنه احتمال خرابی داده در بین عملیات کمتر میشه. (البته حفاظت در مقابل تخریب با تعریف transaction برای دستورات SQL خودتون هم تا حد زیادی جبران میشه)
  • امکان سطح دسترسی به Stored procedure بر اساس کاربر هست که امنیت پایگاه داده رو بالاتر میبره و میتونه جلوی نفوذ کاربر غیر مجاز رو بگیره (برای سیستم مدیریت پایگاه داده هایی که تعریف کاربر و دسترسی دارند، SQLite همچین قابلیتی نداره)
  • میتونه جلوی تزریق کد SQL توسط هکر رو به عنوان پارامتر بگیره (میتونه ولی نه همیشه. در ضمن خود NET Framework. برای تولید کد SQL شامل پارامتر برای جلوگیری از این نوع آسیب پذیری پیش بینی های لازم رو کرده که اگه رعایت کنید نفوذ با تزریق کد SQL نمی تونه صورت بگیره)
در بعضی سیستم های مدیریت پایگاه داده برای استفاده در Trigger ها هم Stored procedure تعریف می کنند تا اگر فلان اتفاق در فلان جدول رخ داد فرضا رکورد حذف شد فلان Stored procedure با فلان پارامتر ها اجرا بشه تا فلان عملیات ها رو انجام بده. ولی SQLite کلا Stored procedure به اون شکل مشخص نداره، البته قابلیت تعریف Trigger ها رو داره.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
در همون لینک ویکی پدیا مزایاشو نوشته، چیزی جز اونها نیست :
  • سربار ارسال دستور SQL به سیستم مدیریت پایگاه داده رو نداره، پس فرمان های SQL داخلش سریعتر از دستوراتی که شما در برنامه تون با SQL می نویسید اجرا میشه. (Linq که از هر دوشون کند تر ئه)
  • چون داده ها در خود پایگاه داده پردازش میشن نیاز به انتقال همه داده های اولیه به سمت برنامه شما نیست و ترافیک داده ای کمتری داره (مزیت عمده ای برای پایگاه داده تحت شبکه و اینترنت ئه، ولی در پایگاه داده محلی هم بی تاثیر نیست)
  • مدیریت داده و کد برنامه رو ساده تر می کنه و چون سیستم مدیریت پایگاه داده از داده تحت نظارت خودش بهتر محافظت میکنه احتمال خرابی داده در بین عملیات کمتر میشه. (البته حفاظت در مقابل تخریب با تعریف transaction برای دستورات SQL خودتون هم تا حد زیادی جبران میشه)
  • امکان سطح دسترسی به Stored procedure بر اساس کاربر هست که امنیت پایگاه داده رو بالاتر میبره و میتونه جلوی نفوذ کاربر غیر مجاز رو بگیره (برای سیستم مدیریت پایگاه داده هایی که تعریف کاربر و دسترسی دارند، SQLite همچین قابلیتی نداره)
  • میتونه جلوی تزریق کد SQL توسط هکر رو به عنوان پارامتر بگیره (میتونه ولی نه همیشه. در ضمن خود NET Framework. برای تولید کد SQL شامل پارامتر برای جلوگیری از این نوع آسیب پذیری پیش بینی های لازم رو کرده که اگه رعایت کنید نفوذ با تزریق کد SQL نمی تونه صورت بگیره)
در بعضی سیستم های مدیریت پایگاه داده برای استفاده در Trigger ها هم Stored procedure تعریف می کنند تا اگر فلان اتفاق در فلان جدول رخ داد فرضا رکورد حذف شد فلان Stored procedure با فلان پارامتر ها اجرا بشه تا فلان عملیات ها رو انجام بده. ولی SQLite کلا Stored procedure به اون شکل مشخص نداره، البته قابلیت تعریف Trigger ها رو داره.

خیلی ممنون استاد
کلا الان شما ، توی پروژه هایی که با SQLite دارین ، از Stored procedure استفاده میکنین؟
برای کار ساده ی من که فقط آدرس فایل ها را ذخیره میکنم (اما ممکنه طبق تعداد فایل های کاربر در کل درایوها، رکوردها هم خیلی زیاد یا خیلی کم باشه) ، چه پیشنهادی دارین؟
با این شرایط استفاده کنم؟ نکنم؟
 

the_king

مدیرکل انجمن
خیلی ممنون استاد
کلا الان شما ، توی پروژه هایی که با SQLite دارین ، از Stored procedure استفاده میکنین؟
برای کار ساده ی من که فقط آدرس فایل ها را ذخیره میکنم (اما ممکنه طبق تعداد فایل های کاربر در کل درایوها، رکوردها هم خیلی زیاد یا خیلی کم باشه) ، چه پیشنهادی دارین؟
با این شرایط استفاده کنم؟ نکنم؟
نه، تناسبی باهاش نداره، چیزی که در قابلیت های اساسی اش نیست رو بزور داخلش وارد نمی کنم. البته من متخصص پایگاه داده ها نیستم، به عنوان برنامه نویس تجاری نظر میدم. اصولا در پروژه های بزرگ و سنگین سازمانی که Stored procedure هم بخاطر مزایاش خیلی استفاده میشه، نه از SQLite استفاده می کنند و نه طراحی پایگاه داده با من ئه. جایی Stored procedure مزایای خودش رو نشون میده که پردازش ها سنگینه یا امنیت بالا مطرح ئه، اینجور جاها SQLite بکار نمیره، SQLite در پروژه هایی که تک کاربره هستند و داده های زیادی ندارند خیلی خوبه چون دنگ فنگ نصب DBMS و برقراری ارتباط با سرور و رفع خطاهای اون رو نداره.
تو پروژه های کوچیک و سبک که معمولا پردازش کمی دارن یا ساختار پایگاه داده رو با فایل های باینری (File Management System) به شیوه شخصی پیاده سازی می کنم یا اگر از SQLite استفاده کنم نیازی برای Stored procedure در اینجور پروژه ها نمی بینم.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
خیلی ممنون استاد
در صفحه ی تنظیمات ، 2 تا بخش (tab) بنام های "برنامه" و "ظاهر" دارم که هر کدوم شون گروه های مختلف دارن (group های مختلف دارن که هر گروه ، تنظیمی داره که هر یک از این تنظیم ، هر کدوم شون میتونن فیلدهای مختلفی در دیتابیس داشته باشن) :

1.JPG

2.JPG

به نظرتون :
اولا همه ی تنظیمات و فیلدهایی که در دیتابیس میذارم ، در یک جدول بذارم یا اینکه یه جدول برای سربرگ و tab "برنامه" و یک جدول دیگه برای سربرگ "ظاهر" درست کنم؟
دوما بخش هایی که مجددا خودشون یه خورده پیچیدگی دارن را چجوری در دیتابیس ذخیره کنم؟ مثلا در عکس اول ، بخش گروه "استثناعات" . همونطور که میدونید ، این قسمت ، نیاز به یه آرایه (در سی شارپ) داره تا درایوهایی که مستثنی شدن را در خودش ذخیره کنه . حالا وقتی بخوام اینو در جدول (جدول مربوط به "برنامه" در دیتابیس) پیاده سازی کنم ، شما پیشنهاد میدین که یه فیلدی در این جدول براش در نظر بگیرم که به عنوان مقدارِ این فیلد ، نام درایوها را با یک کاراکتری (مثلا سیمی کلون) از هم جدا کنم یا اینکه پیشنهاد میدین یه جدول دیگه براش در نظر بگیرم (که در جدول "برنامه" ام یه کلید خارجی به این جدول جدید واسش در نظر بگیرم) ؟ روش دیگه ای که بهتر باشه ، هست که اون روش را پیشنهاد کنین؟

کلا من یه کم توی اینکه بفهمم چه زمانی ، یه جدول جدید در نظر بگیرم یا نه و همینطور اینکه وقتی مقدار یه فیلدی ، بصورت آرایه باشه و بخوام در دیتابیس ذخیره کنم ، نمیدونم کدوم روش را برم و اینکه آیا روش بهتری هم هست؟
بعد اینکه تنظیمات من ، همین دو تا عکسی هست که گذاشتم . اگه پیشنهادی دارین (مثلا یه تنظیمی را به نظرتون باید اضافه کنم اما من در نظر نگرفتم و ...) بگین ، ممنون میشم.
شما از کجا برنامه تون را شروع به کد نوشتن میکنید؟ من فکر میکنم از قسمت تنظیمات کدنویسی کنم ، بهتره . نیست؟ حس میکنم ، نقطه ی مبدا ، حول قسمت تنظیمات در برنامه ها میگرده . درسته؟
 

the_king

مدیرکل انجمن
خیلی ممنون استاد
در صفحه ی تنظیمات ، 2 تا بخش (tab) بنام های "برنامه" و "ظاهر" دارم که هر کدوم شون گروه های مختلف دارن (group های مختلف دارن که هر گروه ، تنظیمی داره که هر یک از این تنظیم ، هر کدوم شون میتونن فیلدهای مختلفی در دیتابیس داشته باشن) :

مشاهده پیوست 112883

مشاهده پیوست 112884

به نظرتون :
اولا همه ی تنظیمات و فیلدهایی که در دیتابیس میذارم ، در یک جدول بذارم یا اینکه یه جدول برای سربرگ و tab "برنامه" و یک جدول دیگه برای سربرگ "ظاهر" درست کنم؟
دوما بخش هایی که مجددا خودشون یه خورده پیچیدگی دارن را چجوری در دیتابیس ذخیره کنم؟ مثلا در عکس اول ، بخش گروه "استثناعات" . همونطور که میدونید ، این قسمت ، نیاز به یه آرایه (در سی شارپ) داره تا درایوهایی که مستثنی شدن را در خودش ذخیره کنه . حالا وقتی بخوام اینو در جدول (جدول مربوط به "برنامه" در دیتابیس) پیاده سازی کنم ، شما پیشنهاد میدین که یه فیلدی در این جدول براش در نظر بگیرم که به عنوان مقدارِ این فیلد ، نام درایوها را با یک کاراکتری (مثلا سیمی کلون) از هم جدا کنم یا اینکه پیشنهاد میدین یه جدول دیگه براش در نظر بگیرم (که در جدول "برنامه" ام یه کلید خارجی به این جدول جدید واسش در نظر بگیرم) ؟ روش دیگه ای که بهتر باشه ، هست که اون روش را پیشنهاد کنین؟

کلا من یه کم توی اینکه بفهمم چه زمانی ، یه جدول جدید در نظر بگیرم یا نه و همینطور اینکه وقتی مقدار یه فیلدی ، بصورت آرایه باشه و بخوام در دیتابیس ذخیره کنم ، نمیدونم کدوم روش را برم و اینکه آیا روش بهتری هم هست؟
بعد اینکه تنظیمات من ، همین دو تا عکسی هست که گذاشتم . اگه پیشنهادی دارین (مثلا یه تنظیمی را به نظرتون باید اضافه کنم اما من در نظر نگرفتم و ...) بگین ، ممنون میشم.
شما از کجا برنامه تون را شروع به کد نوشتن میکنید؟ من فکر میکنم از قسمت تنظیمات کدنویسی کنم ، بهتره . نیست؟ حس میکنم ، نقطه ی مبدا ، حول قسمت تنظیمات در برنامه ها میگرده . درسته؟
برای هیچکدوم از این موارد نظری ندارم. هیچکدوم موارد خیلی مهم و اساسی نیستند که انتخاب تون تاثیر آنچنانی داشته باشه. طبق سلیقه و میل خودتون انتخاب کنید.
در ضمن تنظیمات تخیلی نسازید. اول فکر کنید به اینکه من فلان تنظیم رو میتونم پیاده سازی کنم یا نه و بعد اگه عملی شد تنظیم اش رو قرار بدید. یعنی چی فعال کردن بک آپ گیری خودکار به ازای فلان مقدار تغییرات؟ VSS همچین چیزی داره؟ تغییرات در درایو رو چطور میخواهید بررسی کنید که حالا برایش تنظیم گیگابایتی قرار بدید؟ گیرم که فهمیدید فلان قدر تغییر در درایو رخ داده. اون موقع backup رو فعال کنید که دیگه برگشتی به عقب درکار نیست، از اون به بعد تازه تغییرات ثبت میشه؛ نه قبلش. قبلا در این مورد مفصل بحث کردیم.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
برای هیچکدوم از این موارد نظری ندارم. هیچکدوم موارد خیلی مهم و اساسی نیستند که انتخاب تون تاثیر آنچنانی داشته باشه. طبق سلیقه و میل خودتون انتخاب کنید.
در ضمن تنظیمات تخیلی نسازید. اول فکر کنید به اینکه من فلان تنظیم رو میتونم پیاده سازی کنم یا نه و بعد اگه عملی شد تنظیم اش رو قرار بدید.

خیلی ممنون استاد
الان شما فرض کنید یه جدولی بنام "برنامه" دارین و اطلاعات صفحه ی اول را ذخیره میکنید . یه فیلدی بنام "استثناعات" دارین که قراره آرایه ای را ذخیره کنه . آیا براش ، جدول مجزایی در نظر میگیرید و کلید خارجی اون جدول را توی جدول "برنامه" میریزید؟

یعنی چی فعال کردن بک آپ گیری خودکار به ازای فلان مقدار تغییرات؟ VSS همچین چیزی داره؟ تغییرات در درایو رو چطور میخواهید بررسی کنید که حالا برایش تنظیم گیگابایتی قرار بدید؟ گیرم که فهمیدید فلان قدر تغییر در درایو رخ داده. اون موقع backup رو فعال کنید که دیگه برگشتی به عقب درکار نیست، از اون به بعد تازه تغییرات ثبت میشه؛ نه قبلش. قبلا در این مورد مفصل بحث کردیم.

نه.
منظور از تنظیم "فعال کردن بکاپ گیری اتوماتیک ، به ازای هر فلان گیگابایت تغییر در فلان درایو" این نیست که بعد از اینکه مثلا 5 گیگ تغییرات در درایو F رخ داد ، تازه بخواد سرویس پشتیبانگیر vss را در اون کامپیوتر فعال کنم (اصلا همونطور که شما اشاره کرده بودین ، من با تنظیمات ویندوز و بنابراین با تنظیمات سرویس vss کاربر نهایی ، کاری ندارم . میخواد فعال باشه یا نه) .
به این معنی هه که مثلا اگه 5 گیگ تغییرات در درایو F اتفاق افتاد ، اتوماتیک یک بکاپ جدید تهیه میکنه .
اگه این گزینه تیک زده نشه ، به این معنی نیست که سرویس vss در کامپیوتر طرف ، غیر فعال میشه . به این معنی هه که برنامه ام دیگه میزان تغییرات در هر درایو را حساب نمیکنه و کاربر ، بصورت دستی باید بکاپ خودش را تهیه کنه.
بله . میدونم پیاده سازی اش سخت هست . در واقع ، مهمترین بخش برنامه ، همین تنظیم و محاسبه ی همین تنظیم هست . بصورت کلی ، با filesystemwatcher میخوام پیاده سازی اش کنم ولی میدونم وارد جزئیاتش بشم ، دردسر هم داره . اگه این تنظیم رو نتونم پیاده سازی کنم ، ساخت این نرم افزار ، فایده ی خاصی نداره چون اگه این گزینه اش نباشه ، خوب همون پادویش هست که بدون هدف بکاپ ها را میگیره و ساخت این برنامه لازم نیست .
 

the_king

مدیرکل انجمن
خیلی ممنون استاد
الان شما فرض کنید یه جدولی بنام "برنامه" دارین و اطلاعات صفحه ی اول را ذخیره میکنید . یه فیلدی بنام "استثناعات" دارین که قراره آرایه ای را ذخیره کنه . آیا براش ، جدول مجزایی در نظر میگیرید و کلید خارجی اون جدول را توی جدول "برنامه" میریزید؟
عرض کردم، فرق خاصی نمی کنه که جدول جدیدی بسازید یا نسازید، هر انتخابی بکنید هیچ اتفاق خاصی رخ نمیده که خوب یا بد باشه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلام
استاد ، میخوام توی یه جدول ، هم نام درایوی که در کامپیوتر طرف هست را ذخیره کنم و هم به ازای هر درایو ، یه فیلد از جنس بولین را میخوام ذخیره کنم .
از اونجایی که تعداد درایوها داخل کامپیوتر هر شخص متفاوت هست ، پیشنهاد شما اینه که برای ذخیره ی نام هر درایو ، نام اون درایو را بصورت فیلد جدید در نظر بگیرم (که در این صورت ، تعداد فیلدها در هر کامپیوتری متغییر خواهد بود) و یا اینکه فیلدی بنام "نام درایو" در نظر بگیرم و در سطرهای متفاوت اون ، نام درایوهای مختلف را ثبت کنم (یعنی بجای تعداد فیلدهای متغییر در هر کامپیوتر ، تعداد رکوردها متفاوت باشه) ؟
به نظر روش دوم منطقی تر هه . درسته؟ (تعداد رکورد متفاوت)
 

the_king

مدیرکل انجمن
سلام
استاد ، میخوام توی یه جدول ، هم نام درایوی که در کامپیوتر طرف هست را ذخیره کنم و هم به ازای هر درایو ، یه فیلد از جنس بولین را میخوام ذخیره کنم .
از اونجایی که تعداد درایوها داخل کامپیوتر هر شخص متفاوت هست ، پیشنهاد شما اینه که برای ذخیره ی نام هر درایو ، نام اون درایو را بصورت فیلد جدید در نظر بگیرم (که در این صورت ، تعداد فیلدها در هر کامپیوتری متغییر خواهد بود) و یا اینکه فیلدی بنام "نام درایو" در نظر بگیرم و در سطرهای متفاوت اون ، نام درایوهای مختلف را ثبت کنم (یعنی بجای تعداد فیلدهای متغییر در هر کامپیوتر ، تعداد رکوردها متفاوت باشه) ؟
به نظر روش دوم منطقی تر هه . درسته؟ (تعداد رکورد متفاوت)
اون چیزی که تحت عنوان روش اول مطرح می کنید یک ساختار منطقی نداره، جدول با تعداد سطر ثابت و تعداد فیلد متغیر با اصول طراحی پایگاه داده ها و مفهوم جدول جور در نمیاد. روال عادی همون به اصطلاح شما روش دومه که تعداد فیلد ها و موضوع شون مشخص ئه و به هر تعداد دلخواه سطر داره. جدول قراره عمودی رشد کنه، نه افقی.
در ضمن سعی کنید برای مواردی که انتخاب درایو اهمیت زیادی داره برای ثبت اسامی درایو ها بجای :E و :G و ... که ممکنه به سادگی تغییر کنند، حذف بشن یا جابجا بشن از کد GUID ئه Volume یا شماره سریال درایو استفاده کنید که یک نام قابل اتکا رو ثبت کرده باشید.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
خیلی ممنون استاد (مخصوصا بابت Guid Volume)
میگم برای sqlite (برای دات نت فریم وورک 4.0) اون هم بدون linq و entity framework که هم x64 و هم x86 را پشتیبانی کنه ، بهتره اینو به تنهایی دانلود کنم ؟ :

System.Data.SQLite.Core 1.0.111

چرا Core داره آخرش؟ من واسه ی دات نت فریم وورک میخوام (واسه ی دات نت core نمیخوام)
این هم هست اما کتابخونه های linq و entity framework هم با خودش داره :

System.Data.SQLite 1.0.111

البته این یکی (لینک دومی) را اگه بگیریم ، هم اون بالایی هه (لینک اول) را اتوماتیک دانلود میکنه و هم System.Data.Sqlite.Ef6 و هم System.Data.Sqlite.Linq را که در لینک های جداگانه هستند.
البته من همه ی اینها را قبلا دانلود کرده بودم و الان دارم . میخوام کتابخونه های اضافی را پاک کنم و فقط sqlite را داشته باشم (چون قبلا گفتید که entity framework کارایی قابل توجهی نداره و استفاده از ado.net را به تنهایی پیشنهاد کرده بودین)
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
و اینکه استاد ، من طبق راهنمای زیر :

SQLite Query Language: CREATE TABLE

دستور زیر را مینویسم :

کد:
CREATE TABLE Setting.Program (
  ID INTEGER,
  SilenceMode BOOLEAN)

ارور unknown database را میده . چرا؟
من میخوام جدول هام را دسته بندی کنم و توی یه پوشه ی خاصی (به اصطلاح schema ی خاصی براشون درست کنم) .
دستورات schema همون سایتش را رعایت کردم.
برای دسته بندی کردن جدول ها باید چی کار کنم؟
قبلا هم درباره ی schema پرسیده بودم ولی مثل الان ، نتیجه ای نگرفتم و متوجه نشدم برای ساخت schema و دسته بندی ، باید چی کار کنم؟
خیلی ممنون
 

the_king

مدیرکل انجمن
خیلی ممنون استاد (مخصوصا بابت Guid Volume)
میگم برای sqlite (برای دات نت فریم وورک 4.0) اون هم بدون linq و entity framework که هم x64 و هم x86 را پشتیبانی کنه ، بهتره اینو به تنهایی دانلود کنم ؟ :

System.Data.SQLite.Core 1.0.111

چرا Core داره آخرش؟ من واسه ی دات نت فریم وورک میخوام (واسه ی دات نت core نمیخوام)
این هم هست اما کتابخونه های linq و entity framework هم با خودش داره :

System.Data.SQLite 1.0.111

البته این یکی (لینک دومی) را اگه بگیریم ، هم اون بالایی هه (لینک اول) را اتوماتیک دانلود میکنه و هم System.Data.Sqlite.Ef6 و هم System.Data.Sqlite.Linq را که در لینک های جداگانه هستند.
البته من همه ی اینها را قبلا دانلود کرده بودم و الان دارم . میخوام کتابخونه های اضافی را پاک کنم و فقط sqlite را داشته باشم (چون قبلا گفتید که entity framework کارایی قابل توجهی نداره و استفاده از ado.net را به تنهایی پیشنهاد کرده بودین)
لابد چون با Core سازگار ئه، معنی اش این نیست که فقط برای Core ئه.
اگر قرار باشه چیزی رو دانلود کنم شخصا ترجیح میدم مواردی مثل Precompiled Statically-Linked Binaries رو دانلود کنم که نیازی به نصب بودن Visual C++ runtime ندارند :
SQLite Download Page

و اینکه استاد ، من طبق راهنمای زیر :

SQLite Query Language: CREATE TABLE

دستور زیر را مینویسم :

کد:
CREATE TABLE Setting.Program (
  ID INTEGER,
  SilenceMode BOOLEAN)

ارور unknown database را میده . چرا؟
قبلا هم شبیه همین کار رو کردید و سوال کردید و پاسخ دادم.
شما میخواهید یک جدول به نام Program در پایگاه داده Setting بسازید که وجود نداره، شما پایگاه داده ای با نام Setting باز کردید؟ وقتی Setting ای ندارید Program ای هم داخلش قابل ایجاد نیست.

من میخوام جدول هام را دسته بندی کنم و توی یه پوشه ی خاصی (به اصطلاح schema ی خاصی براشون درست کنم) .
یعنی چی دسته بندی کنید؟ پوشه؟ در کدوم منبع مطلبی در این مورد دیدید که برای گروه بندی جداول schema سازی بشه؟ همچین چیزی نداره.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
لابد چون با Core سازگار ئه، معنی اش این نیست که فقط برای Core ئه.
اگر قرار باشه چیزی رو دانلود کنم شخصا ترجیح میدم مواردی مثل Precompiled Statically-Linked Binaries رو دانلود کنم که نیازی به نصب بودن Visual C++ runtime ندارند :
SQLite Download Page

خیلی ممنون استاد
این لینکی که دادید ، فایل اش رو قبلا دانلود کردم . مشکلش اینه که باید برای ویندوز 32 بیت و 64 بیت ، بیلد جداگانه ای از برنامه ام بسازم (اگه علاوه بر این ، نسخه ی جداگانه هم خواستم بسازم ، از این لینک استفاده میکنم) .

قبلا هم شبیه همین کار رو کردید و سوال کردید و پاسخ دادم.
شما میخواهید یک جدول به نام Program در پایگاه داده Setting بسازید که وجود نداره، شما پایگاه داده ای با نام Setting باز کردید؟ وقتی Setting ای ندارید Program ای هم داخلش قابل ایجاد نیست.


یعنی چی دسته بندی کنید؟ پوشه؟ در کدوم منبع مطلبی در این مورد دیدید که برای گروه بندی جداول schema سازی بشه؟ همچین چیزی نداره.

نگاه کنید . من یه دیتابیس بنام Database.db در مسیر نرم افزارم ساختم . حالا میخوام جدول ها را دسته بندی کنم . یعنی مثلا برای بخش تنظیمات ، 2 تا جدول داشته باشم . بنابراین یه نام ای میخوام بنام Setting تا (به عنوان دسته . تا زیر مجموعه هاش) 2 جدول بنام Program و Interface را داخلِ این دسته ی Setting قرار بدم .
روشی برای ایجاد این کار نیست؟
 

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

بالا