PDA

View Full Version : دلیل بوجود آمدن Confilict در هنگام وارد کردن داده در جداول



mjs753
شنبه 17 بهمن 1383, 14:18 عصر
دلیل بوجود آمدن Confilict در هنگام وارد کردن داده در جداولی که دارای کلید داخلی وخارجی است چیست؟ :sunglass: ::نوشتن::

vadood
یک شنبه 18 بهمن 1383, 10:25 صبح
میشه بیشتر توضیح بدی؟

mjs753
یک شنبه 18 بهمن 1383, 12:04 عصر
ببینید. من دوتا جدول طراحی کردم که کلید اصلی یکی دقیقا در دیگری کلید خارجیه. با َِADO از دلفی به او متصل شدم ولی در هنگام انجام insert برخورد بوجود می یاد. از طریق viewوDiagram هم امتحانش کردم. ::نوشتن::

AminSobati
پنج شنبه 22 بهمن 1383, 20:00 عصر
دوست عزیزم،
من دقیقا متوجه منظور شما از Conflict نشدم. شاید از Foreign Key Constraint دارین تخطی میکنین که این باید باشه. لطفا پیغام Error که برخورد میکنین رو Post کنین.
موفق باشید

محمد حسین صمدیان
جمعه 23 بهمن 1383, 00:19 صبح
اگر کلید اصلی جدولتون کلید خارجی باشه و با کلید اصلی جدول دیگه ارتباط داشته باشه صددرصد خطاست.
در یک دیاگرام رابطتون رو امتحان کنید اگر هر دو طرف رابطه یک کلید نمایان شد رابط اشکال داره و باید جداول و رابطتون رو اصلاح کنید.

AminSobati
جمعه 23 بهمن 1383, 00:45 صبح
اگر کلید اصلی جدولتون کلید خارجی باشه و با کلید اصلی جدول دیگه ارتباط داشته باشه صددرصد خطاست.
در یک دیاگرام رابطتون رو امتحان کنید اگر هر دو طرف رابطه یک کلید نمایان شد رابط اشکال داره و باید جداول و رابطتون رو اصلاح کنید.
دوست عزیزم، ارتباط میتونه One-to-One باشه و در این حالت دقیقا چیزی که شما اشاره کردین پیش میاد و غلط نیست.
موفق باشید

M.GhanaatPisheh
جمعه 23 بهمن 1383, 02:22 صبح
به زبان لری من فکر می کنم شما قصد دارید رکوردی رو به جدولی که حاوی ForeignKey هست Insertکنید که
متناظر اون ForeignKey توی جدول اصلیتون رکوردی وارد نشده :D

mjs753
شنبه 24 بهمن 1383, 15:09 عصر
بزارید یه جور دیگه بگم.
فرض کنید دوتا جدول داریم یکی جدول ( Tel(Id, name, Family, add و اون یکی جدول Tel_nu(Id,Teh_Number ) که Id در tel کلید اصلی ودر Tel_nu کلید خارجی. حالا به من بگید واسه Insert کردن چکار باید بکنم.رابطه بین Tel و Tel_nu هم 1-n است. :(

esi022
شنبه 24 بهمن 1383, 22:28 عصر
یه لطفی میکنی بگی چطوری داری insert میکنی؟
اینطوری همه میفهمیم چشه.
یعنی دستوراتی که برای insert در table هات نوشتی. :موفق:

AminSobati
شنبه 24 بهمن 1383, 23:53 عصر
دوست عزیزم،
همیشه اول میبایست رکورد جدول Parent رو وارد کنین و بعد جدول Child رو. یعنی اول در جدول tel رکورد Parent رو وارد کنین تا Childهای اون در Tel_nu پذیرفته بشن.
موفق باشید

محمد حسین صمدیان
دوشنبه 26 بهمن 1383, 02:47 صبح
دوست عزیزم، ارتباط میتونه One-to-One باشه و در این حالت دقیقا چیزی که شما اشاره کردین پیش میاد و غلط نیست.
موفق باشید
دوست گرامی من نزدیک 9 ماهه با SQL Server کار می کنم و دقیقا در اولین بار به همین مشکل برخوردم.
شما در MSSQL نمیتونید کلید اصلی جدولتون رو کلید خارجی بگذارید(همون One-to-One که اشاره کردید)
یکی از دوستان من بخاطر همین مشکل به MS میل زد.
جدول های شما باید اینطور طراحی بشن.با عرض پوزش
( Tel(Id, name, Family, add
Tel_num(Code,Id,Teh_Number)r که Code کلید اصلیه!!

mjs753
دوشنبه 26 بهمن 1383, 11:45 صبح
من Insert رو توی Delphi نوشتم و با ADO به SQL وصل شدم.

AminSobati
سه شنبه 27 بهمن 1383, 23:41 عصر
دوست گرامی من نزدیک 9 ماهه با SQL Server کار می کنم و دقیقا در اولین بار به همین مشکل برخوردم.
شما در MSSQL نمیتونید کلید اصلی جدولتون رو کلید خارجی بگذارید(همون One-to-One که اشاره کردید)
یکی از دوستان من بخاطر همین مشکل به MS میل زد.
دوست من، شاید هنوز متوجه منظور شما نشدم؟!
به دیتابیس Pubs یک نگاهی بندازید، فیلد Pub_ID در جدول Pub_info هم PK هست و هم FK

M.GhanaatPisheh
چهارشنبه 28 بهمن 1383, 02:19 صبح
جناب ثباتی عزیز
ببینید این مطلب درسته که توی یه table وقتی یه سری فیلد های جدول که به احتمال زیاد ممکنه داده کمتری توشون قرار بگیره می تونن به یه table دیگه با ارتباط 1-1 با جدول قبلی منتقل بشن؟(مثلا از 10 فیلد 5 تا 80٪ احتمال گرفتن data دارن و 5 تا 10٪)
از لحاظ performance یا فضا بهینه سازی میشه درسته؟ ::نوشتن::

AminSobati
چهارشنبه 28 بهمن 1383, 10:31 صبح
دوست عزیزم،
این عمل که معروف به Partitioning هست معمولا به جهت افزایش Performance صورت میگیره. اما ملاک انتقال فیلدها به جدول دیگه، Data داشتن یا نداشتن اونها نیست. یکی از دلایلی که به خاطر اون Partitioning ممکنه صورت بگیره اینه که جدول شما دارای تصاویر یا متن های حجیم باشه و پراکنده بودن این اطلاعات(که عمدتا روی اونها Search صورت نمیگیره) بین اطلاعات قابل Search باعث میشه تا Head هارد دیسک برای جستجو مجبور بشه فضای بیشتری رو طی کنه یا به عبارت دیگه I/O افزایش میابه. لذا این اطلاعات حجیم غیر قابل Search به جدول دیگه ای منتقل میشن. اما این روشها با پیشرفتهایی که در SQL Server شده کمتر استفاده میشه. در حال حاضر شما میتونین از FileGroupها استفاده کنین.
Partitioning مفاهیم و کاربردهای دیگه ای هم داره که در BOL به اون اشاره شده.
موفق باشید

mjs753
سه شنبه 17 خرداد 1384, 18:10 عصر
مر30 :wink: