PDA

View Full Version : گفتگو: روشی برای جلو گیری از تکرار id



navid3d_69
سه شنبه 07 آذر 1391, 08:30 صبح
سلام بنظر شما بهترین روش برای اینکه id در یک جدول تکرای نشه چی هست؟

من در یک قسمت از برنامه کاربر می خواد فاکتور درست کنه حالا مشکل اینجاست که اگر دوتا کاربر بخوان باهم فاکتور درست کنن id تکراری میشه یعنی همون شماره فاکتور تکراری میشه بنظر من بهترین روش اینه که هر کاربری صفحه فاکتور رو باز می کنه یک insert انجام بشه که id ها تکراری نشه و بعد هر تغییری داد update بشه و تا اینجا هیچ مشکلی نیست خب ولی اگر کاربر صفحه فاکتور رو باز کرد و یک insert خودکار انجام شد و کاربر فاکتور رو نساخت خب این insert انجام شده ولی هیچ اطلاعاتی نیست بنظر شما این یک رکورد رو چه جوری پاک کنم؟

فرزند کوروش
سه شنبه 07 آذر 1391, 11:03 صبح
ای دی ها رو باید بصورت AUTO_INCREMENT تنظیم کنید

mtchabok
سه شنبه 07 آذر 1391, 12:54 عصر
سلام بنظر شما بهترین روش برای اینکه id در یک جدول تکرای نشه چی هست؟

من در یک قسمت از برنامه کاربر می خواد فاکتور درست کنه حالا مشکل اینجاست که اگر دوتا کاربر بخوان باهم فاکتور درست کنن id تکراری میشه یعنی همون شماره فاکتور تکراری میشه بنظر من بهترین روش اینه که هر کاربری صفحه فاکتور رو باز می کنه یک insert انجام بشه که id ها تکراری نشه و بعد هر تغییری داد update بشه و تا اینجا هیچ مشکلی نیست خب ولی اگر کاربر صفحه فاکتور رو باز کرد و یک insert خودکار انجام شد و کاربر فاکتور رو نساخت خب این insert انجام شده ولی هیچ اطلاعاتی نیست بنظر شما این یک رکورد رو چه جوری پاک کنم؟

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

SadeghPro19
سه شنبه 07 آذر 1391, 12:59 عصر
سلام
این تاپیک رو دیدم یک سوال که قبلا تو ذهنم بود به یادش افتادم و گفتم چه بهتر که اینجا مطرح کنم و تاپیک جدیدی باز نکنم.
خب سوال من اینه میخوایم خبر ارسال کنیم خب هر خبر یک آی دی داره بر فرض مثال فیلد آیدی رو هم AUTO_INCREMENT تنظیم کردیم خب مدیر میاد چند خبر ارسال می کنه و حالا مدیر میبینه که یک خبر رو اشتباه وارد کرده و اون خبر رو حذف میکنه مثلا 3 تا خبر ارسال کرده خبر شماره 2 را حذف میکنه خب حالا آی دی 2 خالی می مونه و این اصلا جالب نیست به نظر شما چه راه حلی دارید که خبر بعدی که خواست درج بشه بجای آی دی حذف شده درج بشه ؟

eshpilen
سه شنبه 07 آذر 1391, 13:51 عصر
خیر آیدی ای که یک بار استفاده شد دیگه استفاده نمیشه. خوبیش همینه.
مقدار آیدی های AUTO_INCREMENT با هر بار درج افزایش پیدا میکنه، و هیچوقت این عدد به عقب برنمیگرده.

Unique
سه شنبه 07 آذر 1391, 23:01 عصر
خب حالا آی دی 2 خالی می مونه و این اصلا جالب نیست !

میشه بگین چرا جالب نیست ؟! مشکلش کجاست ؟
شما میتونید خودتوت AUTO INCREMENT را مدیریت کنید و این جا های خالی را هم پر کنید اما کار بیهوده ای هستش ! هیچ دلیل منطقی براش وجود نداره ! برای paging یک مزیتی داره اما انقدر راه هست که اون مزیت هم بیهوده جلوه میکنه !

navid3d_69
چهارشنبه 08 آذر 1391, 10:12 صبح
سلام مشکل AUTO_INCREMENT و یا Uniqe نیست

مشکل اینه که کاربر وقتی توی صفحه ساخت فاکتور میره همون ابتدا شماره فاکتور نمایش داده میشه که آخرین id رو + 1 می کنه خب اگر دوتا کاربر هم زمان بخوان 2 تا فاکتور بسازند شماره فاکتور ها یکی میشه

بهترین راه اینه که هر کاربر تا صفحه فاکتور رو باز میکنه یک رکورد insert بشه و id اون رکورد به عنوان شماره فاکتور باشه که این AUTO_INCREMENT هست و اینجوری همیشه یک رکورد رزو شده وجود دارد و تکراری نیست یعنی اگر 100 تا کاربر هم همزمان بخوان فاکتور بسازند id ها تکراری نمیشه و بعد برای بستن و کامل کردن فاکتور همون رکورد که اول insert شده آپدیت میشه

این راه فکر میکنم بهتر باشه اگر کسی نظری داره بگه ممنون می شم

فرزند کوروش
چهارشنبه 08 آذر 1391, 12:08 عصر
خوب میتونید یه رندوم کد هم درست کنبد یعنی یعنی همزمان با اینسرت جدید رندوم کد هم اینسرت بشه بعد موقع اینسرت نهایی او جدول بر اساس رندوم کد اپدیت بشه و پر شه

navid3d_69
چهارشنبه 08 آذر 1391, 12:32 عصر
خوب میتونید یه رندوم کد هم درست کنبد یعنی یعنی همزمان با اینسرت جدید رندوم کد هم اینسرت بشه بعد موقع اینسرت نهایی او جدول بر اساس رندوم کد اپدیت بشه و پر شه

نیازی نیست با همون مقدار id آپدیت می کنم چون id تکراری نیست

Unique
چهارشنبه 08 آذر 1391, 21:29 عصر
به نظر من مشکل کار شما اینه که میخاین شماره فاکتور را قبل از اینکه فاکتور ثبت بشه بدین که این کار اشتباه هست ! . باید وقتی مقادیر وارد و ثبت شد اون AUTOINCREMENT را به کاربر نشون بدین !
اگه میخواین حتما همون موقع باشه باید کاری که گفتین را انجام بدین ! یعنی یک insert با مقادیر خالی بکنین و autoincerement را بگیرین تا در زمان ثبت update کنین ! البته باید در یک زمانی بیاین و این رکورد هایی که Update نشدن و مثلا کاربر صفحه را بسته رفته حذف کنین ! یا بگذارین بمونه که کار زیاد جالب نیست ! کلا این روش شما غیر قابل قبوله از نظر فنی اما دیدم جاهایی که انجام شده.