PDA

View Full Version : سوال: ساخت دیتا بیس برای هر کاربر در سایت



mohammadyaser
یک شنبه 20 آذر 1390, 14:24 عصر
سلام من دارم رو یک وب سایت کار می کنم که کارهای حسابداری شرکت های مختلف رو انجام بده. هر کردم از این شرکت ها چندین کاربر دارند.مشکل من اینجاست که نمی تونم اطلاعات حسابداری این شرکتها رو تو یک دیتابیس قرار بدم چون حجم اطلاعات هر کدوم از این شرکت ها بسیار بسیار بالا هست اگر بگذارم همه شرکتها از همین دیتا بیس استفاده کنند خیلی سنگین میشه.
حالا سوالات من از اساتید این است.
1.ایا کار درستی است که به ازای هر شرکت از دیتا بیس استفاده کنم یا نه؟چرا؟
2.اگر این کار درست است . افراد پس از ورود به سایت و تشخیص هویت باید به دیتابیس مربوط به شرکت خودشان وصل شود .چطور می توان تنظیمات کانکشن web.config راپس از ورود هر کاربر تغییر داد؟
بسیار سپاسگزارم

Saman Hashemi
یک شنبه 20 آذر 1390, 16:35 عصر
1- به نظر من درسته که جدا باشه چون حجم زیاد میشه و هزارتا دردسر دیگه...!
2- کلاس بنویسید درونش با استفاده از نقش کاربر رشته اتصال مربوط به خودشو بگردونید و همه کانکشن ها هم توی وب کانفیگ باشه...!

alonemm
یک شنبه 20 آذر 1390, 17:22 عصر
باسلام:
اگر کانکشن استرینگ رو از فایل Web.config میخونید :
برای تغییر در قسمت کانکشن استرینگ در وب کانفیگ میتونید دستور String.Format جای گزاری نام پایگاه داده رو انجام بدید:

Password=SQL Server user password;User ID=SQL Server user name;Initial Catalog={0}name;Data Source=server name;



موفق باشید.

A.S.Roma
یک شنبه 20 آذر 1390, 18:42 عصر
به نظر من در کنار Project‌اصلی یه پروژه به اسم Common‌یا Manager یا ... داشته باش که وظیفه اش Management اطلاعات هر شرکت (اعم از Database Name‌و ... ) توی یه Database عمومی باشه (مثلا YourNameSpace.Accounting.Common‌)
و تنها ConnectionString این دیتابیس رو Hard Coded تو Web.Config‌بنویس.
برای بقیه دیتابیس ها کانکشن استرینگ رو On The Fly‌بساز و استفاده کن .
این جوری انعطاف سیستمت بالا میره .

aminghaderi
یک شنبه 20 آذر 1390, 19:53 عصر
به نظر من در کنار Project‌اصلی یه پروژه به اسم Common‌یا Manager یا ... داشته باش که وظیفه اش Management اطلاعات هر شرکت (اعم از Database Name‌و ... ) توی یه Database عمومی باشه (مثلا YourNameSpace.Accounting.Common‌)
و تنها ConnectionString این دیتابیس رو Hard Coded تو Web.Config‌بنویس.
برای بقیه دیتابیس ها کانکشن استرینگ رو On The Fly‌بساز و استفاده کن .
این جوری انعطاف سیستمت بالا میره .
من هم با این روش کار موافقم .
ولی این دو قسمت رو زیاد متوجه نشد :

در کنار Project‌اصلی یه پروژه به اسم Common‌ داشته باش

Hard Coded
ممنون می شم کمی توضیح دهید .

sobhan5968
یک شنبه 20 آذر 1390, 22:14 عصر
اگه درست متوجه شده باشم بنظرم کار درستی نیست که تمامی شرکتها اطلاعاتشان متجمع باشه . اگه سرور شخصی دارین که مشکلی نداره ولی اگه از هاستهای معمولی استفاده میکنین کار جالبی نیست ! مقالات زیادی در اینترنت مبنی بر فوق العاده خطرناک بودن برنامه های حسابداری تحت وب موجود هست و اینکار کار عاقلانه ای نیست! اگه واقعا چنین شرایطی لازم باشد که مثلا شرکتی چند شعبه دارد و میخواهند اطلاعاتشان متمرکز باشد پیشنهاد میشود از برنامه های تحت ویندوز با اتصال به بانک تحت وب استفاده شود که از امنیت خوبی برخوردار هستند !

mohammadyaser
دوشنبه 21 آذر 1390, 07:03 صبح
به نظر من در کنار Project‌اصلی یه پروژه به اسم Common‌یا Manager یا ... داشته باش که وظیفه اش Management اطلاعات هر شرکت (اعم از Database Name‌و ... ) توی یه Database عمومی باشه (مثلا YourNameSpace.Accounting.Common‌)
و تنها ConnectionString این دیتابیس رو Hard Coded تو Web.Config‌بنویس.
برای بقیه دیتابیس ها کانکشن استرینگ رو On The Fly‌بساز و استفاده کن .
این جوری انعطاف سیستمت بالا میره .
دوست عزیر ممنون از راه نماییت میشه یک مقدار بیشتر توضیح بدید؟

mohammadyaser
دوشنبه 21 آذر 1390, 07:04 صبح
1- به نظر من درسته که جدا باشه چون حجم زیاد میشه و هزارتا دردسر دیگه...!
2- کلاس بنویسید درونش با استفاده از نقش کاربر رشته اتصال مربوط به خودشو بگردونید و همه کانکشن ها هم توی وب کانفیگ باشه...!
ممنون لطفا یک مقدار در مورد چگونگی این کلاس توضیح بدهید.

A.S.Roma
دوشنبه 21 آذر 1390, 09:16 صبح
من هم با این روش کار موافقم .
ولی این دو قسمت رو زیاد متوجه نشد :


ممنون می شم کمی توضیح دهید .

در مورد پروژه ی Manager حرفم رو پس میگیرم چون کار ایشون تنها تفکیک اطلاعات هست نه چیز دیگه . ( با یک کلاس می تونه این قضیه رو هندل کنه و نیازی به پروژه ی اضافی نیست - البته من خودم معمولا" از پروژه استفاده می کنم چونExtensible تره . )

منظورم از این عبارت"Hard Coded" این بود که ConnectionString رو دستی در کد استفاده کنه . ( نقطه ی مقابل ساخت داینامیک )
شاید ادبیاتم درست نباشه !



دوست عزیر ممنون از راه نماییت میشه یک مقدار بیشتر توضیح بدید؟


شما یک دیتابیس داشته باش که اطلاعات مربوط به تک تک شرکت ها + اطلاعات مورد نیاز ساخت connectionString هر شرکت توش باشه .
مثلا" یه Table‌داشته باشه که فیلداش اینا باشن :
CustomerID , DataSource , userID , Password, DatabaseName , ConnectionTimeOut , ....

به هر روشی اطلاعات رو از این دیتابیس بخون و متناظر اون یک ConnectionString بسازید و بفرستید برای لایه ی DAL‌.

این روش مشابه همون روش آقای هاشمی است منتهی web.config از Database استنفاده شده.

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