PDA

View Full Version : اورژانسی : آیا این ارتباطات F-K درست هست ؟



Babak-Aghili
دوشنبه 04 مهر 1384, 13:03 عصر
سلام .

ببینید ... این ارتیاطات Master / Detail بدین صورت درسته ؟ کار میکنه ؟

؟؟ >> به جداول ارتباطت دهنده ی معروف به Bridge Table دیگه احتیاج نیست ؟ اگر احتیاج هست لطفا در طراحی راهنماییم کنید .

مرسی. :چشمک:

Babak-Aghili
دوشنبه 04 مهر 1384, 16:01 عصر
در راستای افزایش مشارکت .. نمیخواین به من کمک کنین خب !!!
http://www.barnamenevis.org/forum/showthread.php?t=29294

Babak-Aghili
دوشنبه 04 مهر 1384, 19:42 عصر
حالا خوبه که گفته بودم مساله اورژانسیه !!

خوبه دکتر نشدین !

Babak-Aghili
سه شنبه 05 مهر 1384, 09:35 صبح
محض رضای خدا جواب بدین لطفا ....

:گریه: :گریه:

Babak-Aghili
سه شنبه 05 مهر 1384, 21:24 عصر
بقول شاعر :

Help میخواهم که F1 میزنم !

titbasoft
چهارشنبه 06 مهر 1384, 11:54 صبح
میشه یه کم سناریوی کارتون رو توضیح بدید؟

در ضمن ظاهرا سوال شما در مورد design است. شما که بهتر می دونید جای مناسب برای این سوال کجاست! :چشمک:

Navid7h
چهارشنبه 06 مهر 1384, 16:11 عصر
اگه سئوال در مورد طراحی دارین لطفاً یکم بیشتر راجع به سیستم مورد نظر توضیح بدین تا اگه بشه من و دوستات کمکتون بکنیم

Babak-Aghili
چهارشنبه 06 مهر 1384, 19:02 عصر
مرسی. آخه اولین بار هست که با سی شارپ میخوام پروژه دیتابیس بنویسم ..واسه همینه که تردید دارم ...
--------
نه سوال طراحی ندارم ! سوالم بیشتر سی شارپیه ... البته فیلدهای اضافی را هم فعلا بی خیال ...
-------
سناریو این هست :

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

جدول اول : تست ... مثلا تست جغرافی - تافل - و .... که کلید اصلی اش را میبینید. : tmplCode

جدول دوم : صورت سوالات مربوط به هر تست که خب کلیدش ترکیبی است ...که شامل کد تست یعنی tmplCode و کد سوال quesCode هست و ارتباط master/detail را هم روی tmplCode تعریف کرده ام .

جدول سوم : پاسخهای چند گزینه ای مربوط به هر سوال که کلیدش شامل کد تست .. کد صورت سوال و کد صورت جواب است .... ارتباطات master/detail هم کد تست را از جدول دومی به کد تست این جدول و کد صورت سوال را از جدول دومی به کد صورت سوال این جدول وصل کرده ام ...

شکلی که مشاهده میکنید هم که Dataset1.xsd هست ...

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

ممنون و متشکر از حوصله ای که به خرج میدهید ...

Babak-Aghili
پنج شنبه 07 مهر 1384, 10:57 صبح
ممنون ... چقدر بهم کمک کردید ! :بامزه:

ببینید ... تا وقتی که بصورت دستی ارتباطات را برقرار نکردم ... در Datagrid نتوانست Master/Detail ها را نشون بدهد ...


ds.Relations.Add("KOOFT", ds.Tables["Temps"].Columns["tmplCode"],
ds.Tables["Ques"].Columns["tmplCode"]);

حالا سوال :: پس اون Relation هایی که در فایل XSD بصورت گرافیکی ساختیم ... پس اونها کشک است؟ پس چیه اونها ؟

:عصبانی: :عصبانی:

titbasoft
پنج شنبه 07 مهر 1384, 12:35 عصر
دست عزیز ،
junction table یا به قول شما bridge table زمانی مورد استفاده قرار می گیره که ارتباط ما n به m باشه . به عبارت دیگه اگر مثلا یک بانک سوال داشتید و می خواستید برای هر تست از اون بانک استفاده کنید می بایست یک کلید برای تست ها و یک کلید برای سوالات انتخاب می کردید و جدول سومی بوجود می اوردید و اون 2 تا کلید رو باهم به عنوان کلید جدول سوم در نظر می گرفتید. توجه کنید که در این حالت یک سوال می تونه توی تست های مختلف مطرح بشه.

Babak-Aghili
پنج شنبه 07 مهر 1384, 14:06 عصر
ممنون .....
Junction Table را متوجه شدم ... مرسی ..
-----------------------------------------------------------

من دیتا ست را بدین صورت آوردم : به پروژه ، Add New Item کردم و از آنجا DataSet را انتخاب کردم . بعدش هم جدول ها را از Server Explorer به روی آن انداختم و بعدش روی آنها رایت کلیک کردم و Add Relation را انتخاب کردم و ....

پس همیشه Relation ها را خودم باید بصورت دستی بسازم و آنچه که در شکل زیر میبینیم ، فقط یک نمایش گرافیکی هستش ؟؟؟؟ بلی ؟؟؟

titbasoft
پنج شنبه 07 مهر 1384, 19:33 عصر
من دیتا ست را بدین صورت آوردم : به پروژه ، Add New Item کردم و از آنجا DataSet را انتخاب کردم . بعدش هم جدول ها را از Server Explorer به روی آن انداختم و بعدش روی آنها رایت کلیک کردم و Add Relation را انتخاب کردم و ....
تا قبل از این پست گمان می کردم دارید به صورت untyped کار میکنید (به علت کدی که باهاش relation تون رو بوجود اورده بودید) اما با استفاده از این روشی که توی پست قبلی گفتید شک کردم که شاید دارید type dataset استفاده می کنید. میشه مراحل کاری تون رو تا انتها کامل توضیح بدید. یعنی ادامه ... رو هم ذکر کنید.
اگر هم براتون ساده تره خود source برنامه تون رو اینجا بزارید.


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

Babak-Aghili
پنج شنبه 07 مهر 1384, 19:58 عصر
مرسی که پیگیری میکنید ..... source ش که بصورت چرکنویسی هست ... آشغال دونیه ....
-------------------------------------------
پس ادامه اش را میگم ! ..... هیچی دیگه ... وقتی یک Dataset به پروژه ام add کردم ( یعنی همین Dataset2.xsd) حالا از توی ُServer Explorer جدولها را میگیرم و میکشم و ول میکنم ! ( همان drag & Drop فرنگی ها !! ) روی این Dataset .... سپس ادامه کار دقیقا مشابه همان کاری ست که توی دیاگرامهای SQL Server انجام میدهیم . اینجا هم دقیقا همان کار را میکنم و Relation ها تعریف میشن ......

حالا انتظار داشتم که پس از تولید شدن Relation ها ، دیگه برای Master/Detail راحت باشم .. ولی در عمل هیچ کار مفیدی برایم انجام نداد و همانطور که ملاحظه فرمودین مجبور شدم که بصورت دستی آنها را تعریف کنم ...
انتطارم به جا بوده یا نه ؟!!!!!


آقا اصلا این مزخرفات من را بی خیال ....... شما خودتون این مساله را چه میکنید ؟

titbasoft
پنج شنبه 07 مهر 1384, 20:14 عصر
پس ادامه اش را میگم ! ..... هیچی دیگه ... وقتی یک Dataset به پروژه ام add کردم ( یعنی همین Dataset2.xsd) حالا از توی ُServer Explorer جدولها را میگیرم و میکشم و ول میکنم ! ( همان drag & Drop فرنگی ها !! ) روی این Dataset .... سپس ادامه کار دقیقا مشابه همان کاری ست که توی دیاگرامهای SQL Server انجام میدهیم . اینجا هم دقیقا همان کار را میکنم و Relation ها تعریف میشن ......
بازم اون مرحله ای که مورد نظر من بود رو نگفتید و اون bind کردن datagride تونه.

به هر حال اگه یه کم صبر کنید (فقط یه کم) یه source کامل از چیزی که نیاز دارید رو براتون میزارم. چون اگه بخوام وارد بحث typed dataset و untyped dataset بشم فکر کنم کاملا از بحث اصلی منحرف بشیم.

Hamedm
پنج شنبه 07 مهر 1384, 23:17 عصر
ممنون .....
Junction Table را متوجه شدم ... مرسی ..
-----------------------------------------------------------

من دیتا ست را بدین صورت آوردم : به پروژه ، Add New Item کردم و از آنجا DataSet را انتخاب کردم . بعدش هم جدول ها را از Server Explorer به روی آن انداختم و بعدش روی آنها رایت کلیک کردم و Add Relation را انتخاب کردم و ....

پس همیشه Relation ها را خودم باید بصورت دستی بسازم و آنچه که در شکل زیر میبینیم ، فقط یک نمایش گرافیکی هستش ؟؟؟؟ بلی ؟؟؟

سلام دوست عزیز

شما قوانین نرمال سازی رو در طراحی دیتابیس نقض کردید!!
اگه این تاپیک رو بخونید، خودتون متوجه اشتباه کارتون میشید:
http://www.barnamenevis.org/forum/showthread.php?t=26385

در پناه حق موفق باشید و پرتوان

Babak-Aghili
جمعه 08 مهر 1384, 00:09 صبح
تشکرات ...... ولی کجای طراحی من ایراد داره ؟ میشه ذکر کنید ؟

titbasoft
جمعه 08 مهر 1384, 12:14 عصر
here we go
-------------------
اول اسکریپت زیر رو در محیط Query Analyzer اجرا می کنیم تا دیتابیس dbtest ساخته بشه و یه کم دیتا داشته باشه:


create database dbtest
GO
use dbtest
create table tests(
testid int IDENTITY,
[name] nvarchar(30),
CONSTRAINT PK_tests PRIMARY KEY (testid)
)

create table questions (
testid int,
questionNo int ,
[text] ntext,
CONSTRAINT PK_questions PRIMARY KEY (testid,questionNo),
CONSTRAINT FK_questions_tests FOREIGN KEY (testid) REFERENCES tests(testid)
)

create table answers (
testid int,
questionNo int ,
answerNo int,
[text] ntext,
CONSTRAINT PK_answers PRIMARY KEY (testid,questionNo,answerNo),
CONSTRAINT FK_answers_questions FOREIGN KEY (testid,questionNo) REFERENCES questions(testid,questionNo)
)

GO
insert into tests ([name]) values('math1')
declare @id int
set @id=@@IDENTITY
insert into questions (testid,questionNo,[text]) values(@id,1,'what do u think?')
insert into answers (testid,questionNo,answerNo,[text]) values(@id,1,1,'s.th')
insert into answers (testid,questionNo,answerNo,[text]) values(@id,1,2,'n.th')
insert into answers (testid,questionNo,answerNo,[text]) values(@id,1,3,'it''s ok')
insert into answers (testid,questionNo,answerNo,[text]) values(@id,1,4,'what''s problem?')

insert into tests ([name]) values('chem1')
set @id=@@IDENTITY
insert into questions (testid,questionNo,[text]) values(@id,1,'do u know?')
insert into answers (testid,questionNo,answerNo,[text]) values(@id,1,1,'yes')
insert into answers (testid,questionNo,answerNo,[text]) values(@id,1,2,'no')
insert into answers (testid,questionNo,answerNo,[text]) values(@id,1,3,'what')
insert into answers (testid,questionNo,answerNo,[text]) values(@id,1,4,'i don''t think so')


سپس یک پروژه windows app جدید باز می کنیم و یک SqlConnection روی فرم drop می کنیم. connection string رو طوری ست می کنیم که به دیتابیس dbtest متصل بشیم. مثلا:

workstation id=127.0.0.1;packet size=4096;integrated security=SSPI;initial catalog=dbtest;persist security info=Falseحال یک SqlDataAdapter روی فرم drop می کنیم. درون wizard مربوطه ابتدا connection اون رو به چیزی شبیه machinename.dbtest.dbo ست می کنیم و در مرحله بعد use sql statment رو انتخاب می کنیم و در مرحله بعدی کد زیر رو مستقیما درون box مربوطه کپی می کنیم.


SELECT t.[name] test,q.[text] question,a.[text] answer FROM answers a
JOIN questions q ON q.questionNO=a.questionNO AND q.testid=a.testid
JOIN tests t ON t.testid=q.testid

با زدن کلید next از ما سوالی مربوط به ساخته شدن update , insert , delete statment پرسیده میشه که no انتخاب می کنیم و wizard رو به پایان می بریم.
در این مرحله روی شیئ SqlDataAdapter1 کلیک راست کرده و گزینه generate dataset رو انتخاب می کنیم. حال بدون تغیر هیچ کدام از گزینه ها ok می کنیم. در این حالت یک شیئ dataset به نام dataset11 (و نه dataset1) به پروژه ما اضافه میشه. (توی پرانتز بگم این نام گزاری به این علته که با عملیتای که ما انجام دادیم ابتدا یک کلاس از روی inherit ، System.Data.Dataset شده به نام dataset1 . به طوری که جداول فیلدها و ... ما به صورت اشیاء گوناگون و با همان نام های دیتابیسی خود درون اون تعریف شده اند. با انتخاب گزینه show all file از بالای solution explorer و expand کردن dataset1.xsd می تونید اون کلاس رو در فایل dataset1.cs مشاهده کنید. در نهایت یک شیئ جدید از نوع dataset11 از نوع dataset1 به پروژه ما اضافه شده) .
در این مرحله تنها کافی است یک datagrid روی فرم drop کنید ، datasource اون رو حتما به dataset1.answers (نه dataset1) ست کنید ، درون form load تون کد زیر رو اضافه کنید و پروژه خودتون رو اجرا کنید.

sqlDataAdapter1.Fill(dataSet11);
نمونه از پروژه مربوطه در دسترس شماست:

Babak-Aghili
جمعه 08 مهر 1384, 13:38 عصر
:تشویق: :تشویق:

جناب ، خیلی وقت گذاشتین ... شرمنده مزاحم اوقاتتون شدم ..... ..

انشا الله بتونم جبران کنم ...

ممنون ........... الان دانلود میکنم و مطالعه ..

مرسی .... :تشویق:

titbasoft
جمعه 08 مهر 1384, 17:22 عصر
بعد از تشکرات از الطاف جنابعالی،
این یک مثال خیلی ساده است و جا داره که خیلی روش کار بشه. انشاء الله که مورد استفاده قرار بگیره.