PDA

View Full Version : مشکل در ساخت ارتباط یک به یک در SQL Server



Mousavmousab
دوشنبه 20 مرداد 1393, 01:41 صبح
با سلام

دارم یک فروشگاه می سازم که این دو مفهوم => شخص و مشتری را پیاده می کنم.

هر شخص می تونه فقط یک مشتری در فروشگاه من بشه ، بنابر این یک به یک پیاده سازی کردم.

ساختار این جدول ها به این صورت است
Person : Primary and Identity Key hast
Customer: ye Index barash sakhtam


فرضم بر این است که اول جدول Person d یک ردیف ثبت بشه و بعد جدول Customer با ID که توی Person بوده یک ردیف ثبت بشه
در صورتی که وقتی دارم یک ردیف در جدول Person می سازم جلومو می گیره و نمی زاره داده توی Person وارد کنم.


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

دوستان کمک کنند لطفاٌ

122152

Mousavmousab
دوشنبه 20 مرداد 1393, 15:11 عصر
دوستان ، صاحب نظران ، اساتید کمک لطفاٌ

Mousavmousab
دوشنبه 20 مرداد 1393, 20:57 عصر
سلام

یعنی تو این بخش کسی جدول یک به یک نساخته ؟:ناراحت:

Davidd
سه شنبه 21 مرداد 1393, 08:21 صبح
اينكه كسي جواب نداده نشانه ي گنگ بودن سواله.
در ارتباط يك به يك در يكي از جداول مثلا جدول 1، يك ستون اضافه ميشه كه اين ستون كليد خارجي هست و به كليد اصلي جدول 2 اشاره ميكنه.
نوشتين جدولPerson Primary and Identity Key hast يعني چي؟ primary key براي ستون هست نه جدول.
Customer: ye Index barash sakhtam ايندكس گذاشتن ربطي به ارتباط جدول ها نداره.
وقتي مشتري و شخص ارتباط يك به يك دارن و ماهيتشونم يكي هست اصلا چرا دوتا جدول؟

kahe.mehrdad
سه شنبه 21 مرداد 1393, 08:51 صبح
با سلام

دارم یک فروشگاه می سازم که این دو مفهوم => شخص و مشتری را پیاده می کنم.

هر شخص می تونه فقط یک مشتری در فروشگاه من بشه ، بنابر این یک به یک پیاده سازی کردم.

ساختار این جدول ها به این صورت است
Person : Primary and Identity Key hast
Customer: ye Index barash sakhtam


فرضم بر این است که اول جدول Person d یک ردیف ثبت بشه و بعد جدول Customer با ID که توی Person بوده یک ردیف ثبت بشه
در صورتی که وقتی دارم یک ردیف در جدول Person می سازم جلومو می گیره و نمی زاره داده توی Person وارد کنم.


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

دوستان کمک کنند لطفاٌ

122152
سلام دوست مثل این جدول دوم را به صورت زیر پیاده کن احتمالا مشکلت حل بشه:
id: primary key identity
BirthDate: Date
Person_id: Foreign Key --> id(person table)
فقط نباید این کلید خارجی به صورت cascade باشه.

Mousavmousab
سه شنبه 21 مرداد 1393, 10:32 صبح
اينكه كسي جواب نداده نشانه ي گنگ بودن سواله.
در ارتباط يك به يك در يكي از جداول مثلا جدول 1، يك ستون اضافه ميشه كه اين ستون كليد خارجي هست و به كليد اصلي جدول 2 اشاره ميكنه.
نوشتين جدولPerson Primary and Identity Key hast يعني چي؟ primary key براي ستون هست نه جدول.
Customer: ye Index barash sakhtam ايندكس گذاشتن ربطي به ارتباط جدول ها نداره.
وقتي مشتري و شخص ارتباط يك به يك دارن و ماهيتشونم يكي هست اصلا چرا دوتا جدول؟


سلام به دوستان عزیز که سعی خودتونو کردین تا کمکم کنید - فدایی دارین !!!

ولی دوست عزیز شما به تصویر توجه نکردین ! اگر چه من توی گفته هام دقیقاٌ نگفتم فلان فیلد Primary است ، ولی توی تصویر که هست یا اینکه معلومه دیگه Table که نمی تونه Primary باشه ، منظور همون Field مربوطه است. بگذریم.

و امام پاسخ شما : چرا باید 2 تا جدول داشته باشیم ؟ به این دلیل که ما کاربرهایی داریم که کاربر هستند ولی مشتری نیستند. مثلاٌ کارمند است ولی مشتری نیست.
و به این دلیل می خواهم یک به یک باشه که وقتی مثلاٌ یه کارمندی مشتری شد، فقط یک بار بتونه مشتری بشه ، دیگه یک کارمند 10 بار که مشتری نمیشه !!! میشه ؟


دوستان بالاخره من نتونستم این موضوع را هنوز حلش کنم !!!
کمک !!!!

Mousavmousab
سه شنبه 21 مرداد 1393, 10:34 صبح
سلام دوست مثل این جدول دوم را به صورت زیر پیاده کن احتمالا مشکلت حل بشه:
id: primary key identity
BirthDate: Date
Person_id: Foreign Key --> id(person table)
فقط نباید این کلید خارجی به صورت cascade باشه.


دوست عزیز اگر من فیلد Person_Id از جدول Customer را فقط Foreign Key کنم ، اون وقت رابطه بین جدول های Person و Customer بک به چند میشه !!! دقت کن !!!

122183

همچنان مشکلم حل نشده !!!

Davidd
سه شنبه 21 مرداد 1393, 10:49 صبح
جوابشو گفتم: تعريف كليد خارجي. با توجه به همين شكل، جدول Customer كليد اصلي نداره بنابراين يه ستون به نام Customer_id براي كليد اصلي ميخاد. ستون Person_id بايد كليد خارجي باشه. يعني اشاره كنه به ستون Person_id در جدول Person . نياز به Unique بودن هم نداره. اگه توي تعريف و يا مفهوم كليد خارجي مشكلي دارين تا راهنمايي كنم.
در ضمن اگه مشتري وجود داشته باشه كه كاربر نباشه چي؟ اونوقت شما نام و فاميل مشتري توي جدول Person ذخيره ميكنين؟! مگه جدول person براي كاربران نيست؟ اين طراحي به نظرم مشكل داره. در مورد شخص و مشتري بيشتر توضيح بدين.

Mousavmousab
سه شنبه 21 مرداد 1393, 10:59 صبح
جوابشو گفتم: تعريف كليد خارجي. با توجه به همين شكل، جدول Customer كليد اصلي نداره بنابراين يه ستون به نام Customer_id براي كليد اصلي ميخاد. ستون Person_id بايد كليد خارجي باشه. يعني اشاره كنه به ستون Person_id در جدول Person . نياز به Unique بودن هم نداره. اگه توي تعريف و يا مفهوم كليد خارجي مشكلي دارين تا راهنمايي كنم.
در ضمن اگه مشتري وجود داشته باشه كه كاربر نباشه چي؟ اونوقت شما نام و فاميل مشتري توي جدول Person ذخيره ميكنين؟! مگه جدول person براي كاربران نيست؟ اين طراحي به نظرم مشكل داره. در مورد شخص و مشتري بيشتر توضيح بدين.



دوست عزیز این Skype منه : Mousa.basiratnia

اگه محبت کنی یه گفت و گو با هم داشته بشیم.

kahe.mehrdad
سه شنبه 21 مرداد 1393, 11:07 صبح
دوست عزیز اگر من فیلد Person_Id از جدول Customer را فقط Foreign Key کنم ، اون وقت رابطه بین جدول های Person و Customer بک به چند میشه !!! دقت کن !!!

122183

همچنان مشکلم حل نشده !!!

منو وادار کردی که کتاب رانکوهی را باز کنم :تشویق:
ببین من نمیدونم الان چه اصراری داری حتما دو تا جدول تعریف کنی. توی این مواقع چون هم نام و نام خانوادگی و هم birthDate جزو property های person میشه تعریف دو تا جدول اصلا کار درستی نیست. چون همشون باید برن توی یه جدول بشینند اگر میخوای واقعا رابطه یک به یک داشته باشی. در ضمن خیلی از قواعد ER MODEL ضمنی هستند و اونها را باید سمت کد رعایت کرد. چون پیاده سازی ساختار یک به یک و یک به چند دقیقا شبیه همه. اگر بیشتر توضیح بدید که واسه چی میخواید 2 تا جدول داشته باشید شاید بتونم کمکی کنم.

Davidd
سه شنبه 21 مرداد 1393, 11:08 صبح
دوست عزیز این Skype منه : Mousa.basiratnia

اگه محبت کنی یه چند با هم داشته بشیم.

شرمنده من محل كار هستم.
با اطلاعاتي كه از مسئله دارم (اگه درست باشه) بهتر دو جدول مجزا در نظر بگيري . يه جدول براي كاربران و كل اطلاعاتي كه نياز دارن. يه جدول براي مشتري ها و اطلاعاتي كه نياز دارن (مثلا تاريخ تولد يا شماره ملي يا وضعيت تاهل براي مشتري نگهداري نميشه ولي براي كاربر ممكنه اين اطلاعات نياز باشه).
در آخر اگه اين موضوع كه يه مشتري كاربر هست يا نه، مهمه يه ستون به جدول مشتري اضافه كن كه شماره كاربري نشون بده. اينطوري ميشه فهميد كه مشتري كابر هم هست يا نه و اگه هست كدوم كاربر هست.

Mousavmousab
سه شنبه 21 مرداد 1393, 11:51 صبح
دوستان توی Cloob.com عضو هستید با هم گفتگو کنیم؟

اگر مایللید ..
My Cloop ID : MousaDebuger

با تشکر

بهزاد علی محمدزاده
سه شنبه 21 مرداد 1393, 13:31 عصر
122192


INSERT INTO [dbo].[Person] ([PersonId])
VALUES
(1)
GO
INSERT INTO [dbo].[Customer]
([CustomerId])
VALUES
(1)

بهزاد علی محمدزاده
سه شنبه 21 مرداد 1393, 14:09 عصر
این رابطه 1:1 بود و یه رابطه اجباری . یعنی Customer باید حتما براش Person تعریف شده باشه . اما اگر رابطه ایی داشته باشیم به اینصورت : 1 به 0..1 . می تونید یه فیلد برای کلید اصلی ایجاد کنید در جدول Customer و یه فیلد هم برای کلید خارجی به Person که می تونه null باشهو باید هر دو رو با هم Unique قرار بدی . اونوقت می تونی در Customer درج کنی بدون اینکه Person براش تعریف کنی :
ساختار :
122198

درج در Person :
122199
درج در Customer بدون والد :
122200

Mousavmousab
سه شنبه 21 مرداد 1393, 20:52 عصر
بحث خیلی جالب شد ، دوستان سعی می کنند مشکل منو حل کنند ولی نمیدونم چرا مشکل مشکل حل نمیشه !!!!

برای اینکه این مشکل حل بشه من چند دقیقه ، به یک شیوه دیگه مشکلو بازگو می کنم ببینم حل میشه یا نه !!!

Mousavmousab
سه شنبه 21 مرداد 1393, 23:23 عصر
دوستان من یک ویدئو طرح کردم (ساختم) به طوری که کاملاٌ شفاف مشکلم را در آن شرح دادم.

دوستان محبت کنند این ویدئو که 7-8 مگابایت هست را دانلود کنند ، شاید مشکلم حل بشه ، واقعاٌ بازم پیشاپیش دست همتون درد نکنه ، یه دنیا ممنون !!!

دانلود فایل ویدئویی مربوط به سوال پرسیده شده (http://hoolity.com/Prob_One2One_Relation.rar)

بهزاد علی محمدزاده
چهارشنبه 22 مرداد 1393, 09:29 صبح
شما رابطه رو داری برعکس ایجاد می کنی . یعنی جدول Customer و جدول اصلی گرفتی ! ... از سمت Customer درگ می کنی به Person . این عکس از فیلم خودته :

122225

اونجایی که فلش کشیدم , باید برعکس بشه . یعنی Praimery key table باید Person باشه و Id .

Mousavmousab
چهارشنبه 22 مرداد 1393, 11:15 صبح
سلام آقا محمد زاده عزیز !!!
آقا یه دنیا ممنون ، بی نهایت ممنون

مشکلم حل شد ، دقیقاٌ همون طور که گفتین برعکس عمل می کردم.

ارتبط یک به چند را بلد بودم (خیلی کاربردی بود) الان دیگه ارتباط یک به یک را هم به کمک شما یاد گرفتم. :تشویق:

اگی می شد هزار بار دکمه تشکر را کلیک می کردم.:تشویق:


------------------------------------------------------------------

اینم آدرس وبلاگ منه ، برای بچه های فنی حرفه ای و کار و دانش است و می تونه بهشون کمک کنه

آموزش کنکوری ویژوال بیسیک 6 (http://www.homecode.blogfa.com)

موفق باشید

hnyk94
جمعه 24 مرداد 1393, 10:38 صبح
سلام
person_id را باید هم foreign key کنید هم unique
برای اینکه یک relationship یک به یک باشه بایذ foreign key
unique باشه .