View Full Version : چگونگی ایجاد چند کلید خارچی در یک جدول با دستورات T - SQL
sohrabi.1384
پنج شنبه 02 بهمن 1393, 13:44 عصر
سلام همه مهندیسینه ورزشکار :لبخندساده:
ببخشید یه سوال داشتم یه جدول دارم که میخواستم یک کلید اصلی و چند کلید خارجی داشته باشه ، از مهندسین ورزشکار :خجالت: اگر امکانش هست راهنمایی کنید.:بامزه:
En_MK
پنج شنبه 02 بهمن 1393, 23:14 عصر
سلام
شما ابندا باید مباحث مربوط به نرمالسازی دیتابیس را مطالعه بفرمایید تا ببینید اصلا نیازی هست که کلید اصلی های یک جدول را در جدول دیگر کلید خارجی (Foreign key) قرار بدید؟!!!
اینجا (http://www.w3schools.com/sql/sql_foreignkey.asp)مطاب اموزشی به زبان ساده توضیح داده شده
tiphooo
پنج شنبه 02 بهمن 1393, 23:15 عصر
ALTERTABLE FirstTableName WITH CHECK ADD
CONSTRAINT ForegnKeyName FOREIGNKEY(Primary Key FROM FirstTableName)REFERENCES SecondTableName (Field Of SecondTableName)
FirstTableName نام جدول اصلی
ForegnKeyName نام کلید خارجی (معمولا یک نام با معنی)
Primary Key FROM FirstTableName نام فیلد کلید اصلی جدول اول
SecondTableName نام جدولی که میخواهید با ان ارتباط داشته باشد
Field Of SecondTableName نام فیلدی از جدول دوم که میخواهید با فیلد اصلی جدول اول ارتباط داشته باشد
sohrabi.1384
جمعه 03 بهمن 1393, 22:05 عصر
CREATE TABLE Production.Payment4
(
PaymentId INT UNIQUE,
PeymentPrice Money,
PaymentDateTime SMALLDATETIME,
PaymentDescription NVARCHAR(50),
PRIMARY KEY (PaymentId,PaymentDateTime),
InvoiceID INT FOREIGN KEY
REFERENCES Production.Invoice(InvoiceId)
ON DELETE CASCADE
ON UPDATE CASCADE,
---
CustomerID INT FOREIGN KEY
REFERENCES People.Customer(CustomerID)
ON DELETE CASCADE
ON UPDATE CASCADE
----
----
)
مرسی از دوستای خوبمون که به اینجا سر زدن و جواب دادن اما من علتی که سوالمو مطرح کردم این ERROR بود اگر کسی میدونه لطفا بگه این ERROR برای چیست؟
Msg 1785, Level 16, State 0, Line 1
Introducing FOREIGN KEY constraint 'FK__Payment4__Custom__1CBC4616' on table 'Payment4' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Msg 1750, Level 16, State 0, Line 1
Could not create constraint. See previous errors.
SabaSabouhi
شنبه 04 بهمن 1393, 08:20 صبح
سلام
دوست عزیز، SQL به شما اجازه نمیدهد که از دو طریق CASCADE ON DELETE انجام بدین، که منطقی هم هست.
این امکان برای وقتی هست که مثلاً شما قصد حذف یک فاکتور رو دارین. طبیعی هست که با حذف این فاکتور، پرداخت آن
هم باید حذف بشه. اما این درست نیست که با حذف یک مشتری پرداختهاش رو حذف کنید.
طراحی خودتون رو بازنگری کنید. وقتی یه موجودیت مثل یک مشتری تو سیستم گردش میکنه، حذف کردنش کار
صحیحی نیست. بهتره اون رو مخفی یا غیر فعال کنید.
یا حتا اگر اصرار دارین به حذفش، از SQL انتظار نداشته باشین که همکاری کنه :)
خودتون بقیه کارها رو انجام بدین.
صبا صبوحی
sohrabi.1384
شنبه 04 بهمن 1393, 09:42 صبح
هر کس میاد چرا صورت مسیله رو پاک میکنه
یا حتا اگر اصرار دارین به حذفش، از SQL انتظار نداشته باشین که همکاری کنه :)
خودتون بقیه کارها رو انجام بدین.
یعنی چه این حرف؟
یه راه حل بگید ! ! !
اما در کامپیوتر هیچی نشد ندارد
میدومنم با Trigger هم میشه ولی باید یه راهی باشه این کار رو انجام داد
محمود سهرابی :لبخند:
SabaSabouhi
شنبه 04 بهمن 1393, 12:22 عصر
سلام
منظورم اینه که Sql خودش این کار رو براتون انجام نمیده، خودتون باید این کار رو
انجام بدین.
هم میتونین این کار رو توی Trigger انجام بدین، هم توی Stored Procedure و هم
توی لایهی Bl ( اگه چند لایه برنامه مینویسین )
اما باز هم میگم که تو روش کارتون بازنگری کنید. شاید نیازی به حذف مشتری و
سوابق کاریش نباشه.
صبا صبوحی
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.