نمایش نتایج 1 تا 9 از 9

نام تاپیک: کنترل Unique بودن مقدار فیلد در شبکه

  1. #1

    کنترل Unique بودن مقدار فیلد در شبکه

    با سلام محضر کلیه دوستان
    فرض کنیم در محیط شبکه دو نفر کاربر بخواهند رکوردی را به یک جدول که دارای یک فیلد کلید نیز می باشد اضافه کنند ، و قرار است پس از تایید کاربر این رکورد به صورت فیزیکی به جدول Add شود. اما سئوال ؟
    چه روشی به نظر شما برای کنترل این وضعیت به لحاظ Performance است؟
    اینکه به محض ایجاد رکورد توسط کاربر بصورت فیزیکی نیز رکورد در جدول اضافه شود و در صورت عدم تایید آن را حذف کنیم یا از یک جدول کمکی با یک فیلد که تنها مقدار فیلد کلید را نگه داشته و در صورت عدم تایید کاربر تنها این مقدار از این حذف شود .
    توجه فرمایید که در محیط شبکه ممکن است چند کاربر هم زمان شروع به اضافه کردن رکورد نمایند و قاعدتا هر کدام می بایستی مقدار جدیدی بگیرندو این وضعیت ممکن است در جداول رابطه ای مانند فاکتور فروش باشد.
    با تشکر

  2. #2
    اگر از فیلد Identity برای اینکار استفاده کرده باشید روی شبکه هم مشکلی ندارید.
    اگر نوع فیلد شما چیزه دیگری است می توانید از تریگر برای مقدار دهی به آن فیلد استفاده کنید.

    مشکلات را به عهده SQL بگذارید ؛)

  3. #3
    دوست عزیزم
    ضمن عرض سلام و تشکر، شما مطلب فوق را با این نکته در نظر بگبرید که ارتباط با جداول از طریق شی DataAdapter بوده و قرار است پس ازاجراء متد Update این شی، جدول به روز شده و فیلد مورد نظر در جدول مقدار بگیرد حال اگر دو تا کاربر هم زمان به جدول وصل شده باشند مثلا مقدار 5 را دریافت می کنند (یعنی آخرین مقدار 4 بوده) حال هر کدام زودتر متد Update را اجرا کند مقدار 5 به او تخصیص و برای نفر بعد مقدار شش باید تخصیص داده شود پس مهم اخذ مقدار فیلد در این فاصله زمانی می باشد. نه در لحظه Update یا commit شدن

  4. #4
    دوست عزیزم،
    زمانی که اطلاعات تکراری بخواد در PK وارد بشه، خود SQL Server جلوی این تکرار رو خواهد گرفت. یعنی نیازی به حذف ندارید. همونطور که دوستان اشاره کردند، استفاده از Identity حتی در محیط چند-کاربره هم مشکلی نخواهد داشت.

  5. #5
    یک مشکلی که فیلد Idenity دارد این است که هنگامی که به هر دلیلی عملیات اینزرت به شکست انجامید در عمل اینزرت بعدی از شماره بعدی استفاده می شود.
    و در موارد خاصی ممکن است که بخواهیم اعداد در هر صورتی پشت سر هم باشند.
    اگر Net. نمی دانید وارد نشوید.

  6. #6
    در این حالت باید ID رو خودتون تولید کنین. برای جلوگیری از تولید ID تکراری، میتونین آخرین ID رو در جدولی ذخیره کنین و یک SP داشته باشید که براتون ID جدید تهیه میکنه. در این SP، میبایست مقدار جدول رو با xlock بخونین و Update کنین تا در آن واحد، تنها یک کاربر بتونه مقداری رو از جدول بخونه. با توجه به اینکه چنین جدولی تنها یک فیلد و یک رکورد داره، مشکل همزمانی در فراخوانی SP نخواهید داشت چون کار در چند هزارم ثانیه انجام میشه

  7. #7
    من معمولاً از یک sp که ID آخرین فیلد table را می خواند و یکی به آن اضافه می کند در یک ترنس اکشن استفاده می کنم.
    آیا این روش ممکن است به مشکل بخورد؟
    فکر می کنید کدام بهتر باشد؟
    اگر Net. نمی دانید وارد نشوید.

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

    البته برای این کار من از یه جدول دیگه استفاده نکردم و از خود جدول مورد نظر اخرین مقدار رو محاسبه می کنم
    تا حالا هم هیچ مشکلی نداشتم

  9. #9
    خواندن آخرین رکورد از خود جدول مشکلش اینه که ممکنه دو کاربر همزمان این عمل رو انجام بدن، و هر چقدر هم این کار سریع اتفاق بیافته، احتمالش هست که دو کاربر، مقدار یکسان بدست بیارند. مگر اینکه از Hintهای مثلا xlock و holdlock استفاده کنین تا کسی همزمان نتونه بخونه. این هم مشکلش اینه که جدول رو lock میکنه. اصولی ترین کار این هست که این عملیات در جدول دیگه ای انجام بشه

تاپیک های مشابه

  1. Null & Unique
    نوشته شده توسط پرواز در بخش SQL Server
    پاسخ: 8
    آخرین پست: سه شنبه 04 دی 1386, 17:44 عصر
  2. تفاوت حجم MDF در unique index
    نوشته شده توسط A.Farzin در بخش SQL Server
    پاسخ: 7
    آخرین پست: چهارشنبه 28 شهریور 1386, 22:34 عصر
  3. Unique Website Manager
    نوشته شده توسط nematia در بخش PHP
    پاسخ: 1
    آخرین پست: پنج شنبه 17 آذر 1384, 18:33 عصر
  4. توضیحاتی در مورد Create UNIQUE
    نوشته شده توسط m-khorsandi در بخش SQL Server
    پاسخ: 1
    آخرین پست: چهارشنبه 02 شهریور 1384, 19:11 عصر
  5. Unique Web Site Manager
    نوشته شده توسط nematia در بخش PHP
    پاسخ: 10
    آخرین پست: جمعه 16 اردیبهشت 1384, 02:55 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •