PDA

View Full Version : مشکل در رابطه



sajjadrad
پنج شنبه 18 فروردین 1390, 11:04 صبح
سلام دوستان خسته نباشید
چندتا سوال درباره رابطه ها (relationship) داشتم که با جستجو در تالار چیزی پیدا نکردم.

من یه بانک دارم که قراره فاکتور مشتری ها ثبت بشه.
دو تا جدول دارم :یکی جدول اطلاعات فاکتور و یکی جدول لیست محصولات سفارش داده شده در فاکتور...

من جدول اطلاعات فاکتور رو به جدول لیست محصولات رابطه دادم ...چون هر مشتری در یه فاکتور میتونه چندتا محصول رو سفارش بده. فیلد کد سفارش در هر دو جدول هست...طوری که کدسفارش در جدول فاکتور یه ردیف ثبت میشه اما تو جدول محصولات با توجه به تعداد سفارش میتونه چند ردیف با یه کد سفارش باشه.
(اگه طراحی بهتری وجود داره لطفا راهنماییم کنید)

مشکلم اینجاست که چطور باید با توجه به کوئری ها اطلاعات رو به جداول بفرستم.
فرض کنید مشتری 3 محصول سفارش داد الان اطلاعات فاکتور باید به جدول اول و اطلاعات سفارشات به جدول سفارشات بره...
مربوط به جدول فاکتور،فاکتور شماره 1:
1,1390/01/18,3,3000
مربوط به جدول سفارشات فاکتور شماره 1


1,1,CD,5,1000
1,2,DVD,3,1000
1,3,Blueray,1,1000

جدول factor
ID,Date,Total,T_Price
جدول سفارشات
ID,Code,Code_info,Code_t,Price

الان من چطور باید از کوئری های insert,select,delete استفاده کنم؟یکم گیج شدم.
بعد وقتی ما یه فاکتور رو ثبت میکنیم آیا شماره سفارش بطور اوتوماتیک در جدول سفارشات ثبت میشه یا باید اطلاعات رو بفرستم.اگه کسی یه زاویه دید درست حسابی از رابطه ها بده خیلی ممنون میشم.:قلب:

SReza1
پنج شنبه 18 فروردین 1390, 11:49 صبح
دوست عزيز شماره به صورت اتوماتيك ثبت نميشه. اين relation كه شما ايجاد ميكنيد تنها تضمين ميده كه اطلاعات به صورت معتبر ذخيره بشه. مثلا اينكه اطلاعات ريز فاكتور بدون header نباشه و از اين قبيل كارها.
ضمن اينكه شما براي اينكار به يك سري فرم احتياج داريد كه اين فرمها طبيعتا در يك محيط برنامه نويسي مثل دلفي يا #C بايستي پياده سازي بشه. اين زبانها master - detail را كاملا پشتيباني ميكنه و خودشون masterid رو در detail به طور اتوماتيك درج مي كنند.
اگر هم ميخواهي براي خودت و يا تمرين نحوه ذخيره سازي اطلاعات بدون فرم هاي برنامه نويسي اين كار رو بكني پيشنهاد ميدهم كه در يك transaction ابتدا header و بعد detailها رو ذخيره كني

sajjadrad
پنج شنبه 18 فروردین 1390, 11:55 صبح
مرسی از پاسخ
من برنامه رو تو سی شارپ نوشتم...الان مشکلم سر کوئری هستش...مثلا فرض کنید که اطلاعاتی که دادم رو میخوام به بانک بفرستم...
مشکل اینجاست که چون تعداد سفارشات متغیره نمیدونم چندتا insert و چطوری باید بکار برد.

در ضمن من کد سفارش دوتا جدول رو به هم ربط بدم درسته؟تو جدول اول از هر کد سفارش 1 ردیف ثبت میشه اما تو جدول دوم با توجه به تعداد سفارشات ردیف ثبت میشه...

این کد باید منحصر به فرد باشه؟

sajjadrad
پنج شنبه 18 فروردین 1390, 11:57 صبح
درضمن من اطلاعات فاکتور رو تو یه دیتاگرید ذخیره کردم و تو چندتا آرایه مقداردهی کردم...

محمد سلیم آبادی
شنبه 20 فروردین 1390, 15:17 عصر
سلام،
توضیحات خوبی ارائه دادی ولی متاسفانه مشکلتون رو بطور واضح و دقیق مطرح نکردین.

شما می تونی نوع داده مربوط به کد فاکتور رو هر چیزی بگیرین گاها دیده می شه از نوع int با خصیصه identity یا از نوع uniqueidentifier با مقدار پیش فرض NEWID است. برای بدست آوردن مقدار کلید آخرین فاکتور ثبت شده اگر کلید از یکی از دو نوعی که قبلا توضیح داده باشه بسادگی امکان پذیر است. بعد از اینکه این مقدار رو بدست آوردین در جدول سفارش درج می کنید. بدون درگیر شدن با این مقدار.

برای اینکه با انواع رابطه و غیره آشنا بشین:http://www.30sharp.com/article/13/245/11/%d9%82%db%8c%d8%af-%da%a9%d9%84%db%8c%d8%af-%d8%ae%d8%a7%d8%b1%d8%ac%db%8c-%d8%a8%d8%b1%d8%a7%db%8c-%d9%be%db%8c%d8%a7%d8%af%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-%d8%ac%d8%a7%d9%85%d8%b9%db%8c%d8%aa-%d8%a7%d8%b1%d8%ac%d8%a7%d8%b9%db%8c.aspx

و برای بدست آوردن آخرین GUID تولید شده در جدول:
http://www.30sharp.com/article/13/199/11/%d8%a8%d8%af%d8%b3%d8%aa-%d8%a2%d9%88%d8%b1%d8%af%d9%86-%d8%a2%d8%ae%d8%b1%db%8c%d9%86-guid-%d8%aa%d9%88%d9%84%db%8c%d8%af-%d8%b4%d8%af%d9%87-%d8%af%d8%b1-%d8%ac%d8%af%d9%88%d9%84.aspx

اگر بتونید دقیقا مشکلتون رو مطرح کنید Query مورد نظر رو معرفی خواهیم کرد.

yousef_61
یک شنبه 21 فروردین 1390, 08:27 صبح
با سلام ،
دوست عزيز شما ميتونيد اطلاعات يك فاكتور رو داخل يك جدول موقت ريخته و از طريق دستور Insert Into[table name] اطلاعات اين جدول موقت كه حاوي فاكتور جديد هست رو به جدول سفارشات اضافه كني.

tooraj_azizi_1035
سه شنبه 30 فروردین 1390, 15:12 عصر
سلام،
چهار موجودیت به نام های مشتری، محصول، سفارش و فاکتور داریم. رابطه آنها را اینگونه تعریف می کنیم:

هر مشتری می تواند چند محصول را سفارش دهد و هر محصول می تواند توسط چند مشتری سفارش داده شود پس رابطه Many-To Many است.

هر محصول می تواند در چند فاکتور بیاید و هر فاکتور می تواند چند محصول را در خود داشته باشد پس رابطه Many-To Many است.


یک سفارش می تواند در قالب چند فاکتور تامین شود.
شما جداول مشتری و محصول رو توسط جدول سفارش به هم متصل کن. ID مشتری در کنار ID محصول که هر دو در کنار ID سفارش هستند. بعد بین جدول سفارش و فاکتور رابطه یک به چند ایجاد کن. سفارش سمت یک و فاکتور سمت چند رابطه رو تشکیل می ده.
در رابطه با نحوه ذخیره کردن داده ها هم شما با سه خط برای هر فرم این کار رو انجام می دی:

YourForm.Validate();
YourBindingSource.EndEdit();
YourAdapter.Update(YourDataSet.YourTable);


Hope this helps.:قلب: