ورود

View Full Version : حرفه ای: ارتباط بین دو Database



Galawij
چهارشنبه 01 دی 1389, 12:40 عصر
سلام.
من برای پروژه ام از چند تا DataBase جدا استفاده می کنم. دنبال روشی می گردم که بتوان همانطور که بین جداول در یک DataBase ارتباط برقرار می کنیم، بین DataBase ها هم ارتباط برقرار کنم. یعنی وقتی حدود 30 جدول در یک بانک اطلاعاتی وجود داردو نیاز است که این جداول نیز در بانک دیگر تعریف شود، دیگر نیازی به تعریف مجدد نباشد بلکه فقط با یک ارتباط از این بانک اطلاعات جداول مورد نیاز از بانک دیگر واکشی شود.
ممنون می شم راهنمایی کنید...

حمیدرضاصادقیان
چهارشنبه 01 دی 1389, 12:49 عصر
سلام.اگر دیتابیس های شما روی سرورهای مختلف هستند باید از Linked Server استفاده کنید. در غیر اینصورت میتونید به این شکل عمل کنید:


Select d1.field1,d2.field2 from
Database1.dbo.table1 d1 inner join
Database2.dbo.table2 d2
on d1.id=d2.id

Galawij
چهارشنبه 01 دی 1389, 13:04 عصر
آقای صادقیان به نظر شما از لحاظ امنیتی درسته که بانک اطلاعاتی کلی یک پروژه را به چند تا DataBase تقسیم کرد؟
مزایا و معایب این کار چی می تونه باشه؟

حمیدرضاصادقیان
چهارشنبه 01 دی 1389, 13:38 عصر
این بستگی به Solutionو نوع پروژه شما داره.مثلا میزان حجم تقریبی دیتابیس چقدر خواهد بود؟ آیا همه اطلاعات دیتابیس مورد استفاده قرار میگیره؟ و...
شما باید بفرمائید کلیت پروژه چی هست تا بشه بیشتر درموردش فکر کرد و صحبت کرد.

Galawij
چهارشنبه 01 دی 1389, 13:56 عصر
دارم روی تحلیل سیستم انتخاب مشاوره از سمت کارفرما(سازمان های دولتی) جهت انجام کارهای پیمانکاری کار می کنم. چون تعداد جداول این بخش(فقط این بانک اطلاعاتیم) خیلی زیاد می شه به فکرم رسید که در قالب چند تا Database جدا پیاده سازیش کنم.این برنامه تحت وب پیاده سازی می شه.
در کل برای هر نوع پروژه ای چنین تجزیه ای چه عواقبی می تونه داشته باشه؟

حمیدرضاصادقیان
چهارشنبه 01 دی 1389, 14:11 عصر
مثلا چند تا Table میشه.؟
ببینید الان نرم افزار همکاران سیستم با 1000 جدول روی یک دیتابیس هست.
معمولا وقتی میان از چند تا دیتابیس استفاده می کنند که یا برنامه های جداگانه باشه.
یا اینکه یک سری جداول که معمولا فقط برای گزارشگیری هست رو در یک دیتابیس قرار میدهند و جداولی که اطلاعات اونها دائم تغییر میکنه در یک دیتابیس دیگه. که هم حجم اطلاعات کاهش پیدا کنه هم سرعت کار بره بالا.یا مثلا در سیستم های مالی بخوان سالهای مالی مختلف رو از هم جدا کنند.خلاصه پیوستگی بین اطلاعات عملا زیاد مهم نیست. چون اگر پیوستگی باشه و حجم اطلاعات زیاد باشه روشهای دیگری برای جداسازی جداول وجود داره و نیازی نداره که روی دیتابیس های مختلف قرار بگیره.
ولی برای کار شما به نظرم نیاز نیست یک همچین کاری انجام بدید.

m_omrani
چهارشنبه 01 دی 1389, 15:20 عصر
به این دو نکته هم توجه داشته باشید:

1. اول این که وقتی چند تا دیتابیس داشته باشید دیگه باید قید Relation بین جداول در دیتابیس ها رو بزنید (چون نمی تونید FK به کلید جدول یک دیتابیس دیگه ایجاد کنید). در نتیجه دیگه قابلیت Referential Integrity، Cascade Delete, Cascade Update و این طور چیزها ندارید. لذا خیلی باید نسبت به اتخاذ این مدل دقت داشته باشید و کاملاً آگاهانه این کار رو انجام بدید و اگر این کار رو کردید، سربار تمامی اینها به گردن خودتونه (در حالی که در حالت یک دیتابیس، این کار رو خود دیتابیس سرور براتون انجام می ده).
2. دوم این که استفاده از Linked Server رو فقط به عنوان آخرین Solution و در جایی که هیچ گزینه دیگه ای ندارید بهش نگاه کنید. چون از لحاظ Performance اصلاً مناسب نیست. طبعاً Linked Server موقعی مطرح می شه که دیتابیس ها روی یک سرور نباشن، در غیر این صورت دلیلی برای استفاده از Linked Server وجود نداره.

و در نهایت این که اگه چند تا دیتابیس داشته باشید، قطعاً باید چندین Connection String، چندین User، چندین Role، چندین سیاست پشتیبان گیری و ... داشته باشید.

خصوصاً اگه زمانی قرار بشه که بک آپی رو Restore کنید دیگه وا ویلا است. چون هماهنگی بین دیتابیس ها بسیار مشکل می شه.

لذا تا جای ممکن بهتره اصلاً سراغ مدل چند دیتابیسی نرید.