با سلام خدمت دوستان گرامی
در این پست قصد دارم در مورد چالشی که برای بروز رسانی سیستم ها مطرح کردم ، صحبت کنم.
بذارید با یک چالش دیگه شروع کنم

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

خوب به نظرم سوال بسه.
بریم سر جوابها.
متاسفانه در SQL Server امکان اضافه کردن دیتابیس به سورس کنترل وجود نداره. بعضی از شرکتها مثل Red gate ابزاری دادند که به شما اجازه میدن دیتابیستون رو داخل سورس کنترل نگهداری کنید.
یا مثلا از ابزاری مثل Flyway استفاده کنید و کاملا به صورت Command سورستون رو مدیریت کنید.

نه صبر کنید. ....
یک خبر خوب دارم براتون.

با استفاده از Visual Studio شما یک پروژه به نام SQL Server Database Project دارید . که میتونید توسط ابزار SSDT Tools هم در نسخه های قبل نصبش کنید.
خوب مزیت این ابزار چیه.

روش کار کردن این ابزار به این شکل هست که کاملا مستقل از دیتابیس رفتار میکنه و کل دیتابیستون رو درمرحله اول به صورت اسکریپت داخل خودش اضافه میکنه.
حالا شما کل این Solution رو به راحتی میتونید به سورس کنترل مورد نظر اضافه کنید.

خوب حالا چی شما دارید و چه مزایایی رو داره این روش؟
خوبی این روش این هست که هر کسی که میخواد کار بکنه Solution رو Checkout میکنه و روی WorkSpace خودش روی سورس کار میکنه و وقتی که Solution رو Deploy میکنه روی دیتابیس localdb سیستم خودش دیبایس اجرا میشه و به هیچ چیزی ارتباطی نداره و به راحتی میتونه کارهای خودش رو تست کنه.
در نهایت کارهایی که انجام داده رو Check In میکنه.

حالا شما نیاز به یک build Server داره که یک Compare با دیتابیس مقصد بکنه و یک Script از تغییرات به شما بده و کافیه فقط اون روی سیستم مقصد اجرا بشه بدون اینکه مشکلی برای داده ها ایجاد بشه یا چیزی از بین بره.( چطوری امکان داره؟؟ )
شاید این سوال برای شما ایجاد شده باشه که مثلا یک فیلد رو نوعش رو عوض میکنیم تکلیف داده هاش چی میشه؟؟؟؟
یا اگر یک ستون رو حذف کنیم یا یک ستون به جدولی که داده داره اضافه کنیم چی میشه؟
هیچی در یک PreDeploy Script میتونید این مورد رو هندل کنید.

یکی از زیبایی های این روش این هست که شما میتونید سیستم دیتابیس خودتون رو به روش TDD - Test Driven Development توسعه بدید.
یعنی میتونید اولا Unit Test برای کدهاتون بنویسید بعد مثلا SP یا View بنویسید و وقتی دارید Solution رو Deploy میکنید اول Unit Test های شما اجرا میشه روی یک دیتابیس تست. بعد در نهایت اگه همه چیز بر وفق مراد بود حالا اسکریپت تغییرات بر روی سیستم مشتری یا QA اجرا میشه.

امیدوارم تا همین جا یک دید کلی درمورد این ابزار فوق العاده کسب کرده باشید و بتونید از این به بعد با استفاده از این ابزار ، توسعه دیتابیس رو وارد چرخه مهندسی نرم افزار بکنید.
سعی میکنم در پست بعدی یک مثال بدارم و نحوه کارش رو توضیح بدم که بیشتر باهاش آشنا بشید.

منتظر نظرات دوستان عزیزم هستم.
ارادتمند.