View Full Version : سوال: ایجاد دو ارتباط با استفاده از یک کلید اصلی
f_arab
دوشنبه 08 آذر 1389, 16:04 عصر
سلام دوستان عزیز
میخواستم از شما بپرسم آیا میشه با استفاده از یک کلید اصلی دو ارتباط با یک جدول ایجاد کرد
به عنوان مثال یک فیلد از جدول اول را که کلید اصلی هم هست توسط دو ارتباط به دو فیلد جداگانه از یک جدول دیگر مرتبط کنیم؟ به عبارتی یک جدول با دو کلید خارجی به جدول دیگر مرتبط باشد
متشکرم:لبخندساده:
حمیدرضاصادقیان
دوشنبه 08 آذر 1389, 21:19 عصر
سلام.شما میتونید یک کلید اصلی رو به چند فیلد در جداول مختلف ربط بدید. ولی چطوری شما دو فیلد در جدول دوم دارید که مقدارش به یک فیلد وابسته هست.؟؟؟
شاید طراحی تون مشکل داره. اگر میتونید ساختار جداول رو اینجا قرار بدید.
eastprogrammer
سه شنبه 09 آذر 1389, 13:47 عصر
البته ارتباط دو فیلد از یک جدول با یک فیلد - فیلد اصلی - جدولی دیگر لزوما بیانگر وجود ایراد در طراحی دیتابیس نمی تونه باشه !!!
خیلی وقتا این مورد کاملا طبیعیه و بیانگر وجود افزونگی نیست.
اما راهکارهای بهتری برای این کار وجود داره که به نرمال تر شدن بانک کمک می کنه.
اونم استفاده از یک جدول ارتباطی به ازای هر رابطه با جدول اصلی بجز فیلد اول.
حمیدرضاصادقیان
سه شنبه 09 آذر 1389, 14:09 عصر
البته ارتباط دو فیلد از یک جدول با یک فیلد - فیلد اصلی - جدولی دیگر لزوما بیانگر وجود ایراد در طراحی دیتابیس نمی تونه باشه !!!
منم عرض کردم
شاید طراحی تون مشکل داره
که برای بررسی دقیقتر باید ساختار رو مورد بررسی قرار داد.
f_arab
سه شنبه 09 آذر 1389, 15:23 عصر
سلام
من یه جدول دارم که مشخصات یک سری از افراد رو اونجا وارد کردم
یه جدول دیگه هم دارم که توش نام یک سری قطعات سخت افزاری وارد شده که کد فردی که از اون استفاده می کنه و فردی که اونو تحویل گرفته(لزوما تحویل گیرنده همون کاربر نیست) و یک سری مشخصات دیگه مربوط به تحویل وارد شده
راستش من فقط کد کاربر رو به عنوان کلید خارجی در نظر گرفته بودم حالا میبینم که اگه یه ارتباطی بین جدول مشخصات افراد و کد تحویل گیرنده وجود نداشته باشه ممکنه کدی وارد بشه که برای اون هیچ فردی تعریف نشده(یعنی کسی قطعه سخت افزاری رو تحویل می گیره که شاید اصلا وجود نداشته باشه!!)
اینم ساختار جداولمه:
USE [it]
GO
/****** Object: Table [dbo].[karmand] Script Date: 11/30/2010 15:46:00 ******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
CREATETABLE [dbo].[karmand](
[code_karmand] [nvarchar](15)COLLATE Arabic_CI_AS NOTNULL,
[name] [nvarchar](20)COLLATE Arabic_CI_AS NULL,
[familly_name] [nvarchar](20)COLLATE Arabic_CI_AS NULL,
[user_name] [nvarchar](20)COLLATE Arabic_CI_AS NULL,
[semat] [nvarchar](20)COLLATE Arabic_CI_AS NULL,
[makan] [nvarchar](20)COLLATE Arabic_CI_AS NULL,
CONSTRAINT [PK_karmand_1] PRIMARYKEYCLUSTERED
(
[code_karmand] ASC
)WITH(IGNORE_DUP_KEY =OFF)ON [PRIMARY]
)ON [PRIMARY]
GO
USE [it]
GO
ALTERTABLE [dbo].[karmand] WITHCHECKADDCONSTRAINT [FK_karmand_network] FOREIGNKEY([user_name])
REFERENCES [dbo].[network] ([user_name])
ONUPDATECASCADE
ONDELETECASCADE
USE [it]
GO
/****** Object: Table [dbo].[tozi_hardware] Script Date: 11/30/2010 15:48:55 ******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
CREATETABLE [dbo].[tozi_hardware](
[code_ghete] [smallint] NOTNULL,
[serial_number] [nvarchar](20)COLLATE Arabic_CI_AS NULL,
[shmare_amval] [smallint] NULL,
[code_tahvilgirande] [nvarchar](15)COLLATE Arabic_CI_AS NOTNULL,
[fname_tahvilgirande] [nvarchar](20)COLLATE Arabic_CI_AS NULL,
[lname_tahvilgirande] [nvarchar](20)COLLATE Arabic_CI_AS NULL,
[vahed_tahvilgirnde] [nvarchar](20)COLLATE Arabic_CI_AS NULL,
[tarikh_tahvil] [nchar](10)COLLATE Arabic_CI_AS NULL,
[user_code] [nvarchar](15)COLLATE Arabic_CI_AS NOTNULL,
[tozihat] [nvarchar](50)COLLATE Arabic_CI_AS NULL,
CONSTRAINT [PK_tozi_hardware] PRIMARYKEYCLUSTERED
(
[code_ghete] ASC
)WITH(IGNORE_DUP_KEY =OFF)ON [PRIMARY]
)ON [PRIMARY]
GO
USE [it]
GO
ALTERTABLE [dbo].[tozi_hardware] WITHCHECKADDCONSTRAINT [FK_tozi_hardware_hardware] FOREIGNKEY([code_ghete])
REFERENCES [dbo].[hardware] )
ONUPDATECASCADE
ONDELETECASCADE
GO
ALTERTABLE [dbo].[tozi_hardware] WITHCHECKADDCONSTRAINT [FK_tozi_hardware_karmand] FOREIGNKEY([user_code])
REFERENCES [dbo].[karmand] ([code_karmand])
ONUPDATECASCADE
ONDELETECASCADE
حمیدرضاصادقیان
سه شنبه 09 آذر 1389, 16:00 عصر
اولین نکته ای که همین ابتدا نظرمو جلب کرد اینه که اگر در جدول سخت افزار نام و فامیلی و واحد تحویل گیرنده همونی هست که در جدول مشخصات افراد هست دیگه نیازی نیست اینجا بیارید و این سه تا فیلد رو حذف کنید.کافیه فقط با یک join اونارو فراخوانی کنید.چون در این روش اگر در جدول مشتریان نامش عوض شد اینجا تغییر نمیکنه و مشکل ساز میشه.
درمورد مابقی ساختار، چیز خاصی به ذهنم نمیرسه و فکر میکنم مشکلی نداشته باشه.
f_arab
سه شنبه 09 آذر 1389, 16:49 عصر
اولین نکته ای که همین ابتدا نظرمو جلب کرد اینه که اگر در جدول سخت افزار نام و فامیلی و واحد تحویل گیرنده همونی هست که در جدول مشخصات افراد هست دیگه نیازی نیست اینجا بیارید و این سه تا فیلد رو حذف کنید.کافیه فقط با یک join اونارو فراخوانی کنید.چون در این روش اگر در جدول مشتریان نامش عوض شد اینجا تغییر نمیکنه و مشکل ساز میشه.
درسته راستش خودم توی جدولی که ابتدا طراحی کردم فقط کد تحویل گیرنده رو گذاشتم ولی نمیدونم چرا استادم اصرار داره توی این جدول نام و نام خانوادگی و واحد هم وارد بشه:متفکر:
منم که نمیدونستم چه کار کنم ، هر چیزی که استادم می گفت رو وارد کردم:ناراحت:
البته اصلا به فکر این نبودم که ممکنه نامها تغییر داده بشه و مشکل ایجاد کنه
در هر صورت ممنون از راهنماییتون، چون موضوعی که خیلی مهمه و من فراموشش کرده بودم رو به یادم آوردید تا با استادم در میون بذارم
خیلی خیلی ممنون
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.