PDA

View Full Version : انتخاب int یا nchar به عنوان کلید اصلی جدول



salmah
شنبه 19 دی 1394, 18:52 عصر
سلام من حدود دوسال پیش سایتیطراحی کردم که دیتابیس استانداردی براش طراحی نشد ولیاینمدت کار میکرد
یکی از جدولها کد پرسنلی افراد را به عنوان کلید درنظر گرفتم و تا اونموقع کد پرسنلی کارمندان 6 رقمی بود و نوع int پشتیبانی می کرد
الان که کد پرسنلی 12 رقمی شده من نوع int را به (20)nchar تغییر دارم ولی مشکلات زیادی به همراه داره
مثلابرای حذف از گرید ویو با این خطا موجه هستم

Value was either too large or too small for an Int32
به نظرتون من چ کار کنم
از این کد پرسنلی به عنوان کلید خارجی دریک جدول دیگر استفاده کردم

پیام حیاتی
شنبه 19 دی 1394, 19:03 عصر
bigint در نظر بگیرید ، در جدول های دیگر هم نوع داده کلید خارجی رو bigint کنید و در نهایت تست.

salmah
شنبه 19 دی 1394, 19:13 عصر
نوع bigint تا چندرقم را پشتیبانی میکنه
اگر نشد charبهتر نیست؟

پیام حیاتی
شنبه 19 دی 1394, 21:40 عصر
Bigint: قابلیت ذخیره سازی 8 بایت را دارا می باشد و محدوده اعداد صحیح 9,223,372,036,854,775,808- تا 9,223,372,036,854,775,807 را شامل شده و کاربرد آن هنگامی است که مقدار داده ی صحیح بیش از نوع داده ی int باشد.
Char کارها رو خراب میکنه کاراکتر هست ،شما داده عددی در فیلدها دارید.

ahmad156
شنبه 19 دی 1394, 21:59 عصر
بهتره که فیلدهای اصلی اطلاعاتتون (کد پرسنلی) رو به عنوان کلید در نظر نگیرین.به شخصه کلید هر جدولی رو بسته به شرایط یا از نوع BigInt و Identity و یا از نوع Guid قرار میدم

salmah
شنبه 19 دی 1394, 22:38 عصر
bigint انتخاب کردم
الان برای حذف از گرید ویو با این خطا مواجه میشم
The conversion of the nvarchar value '444455555666666' overflowed an int column.
The statement has been terminated.

پیام حیاتی
یک شنبه 20 دی 1394, 06:47 صبح
کدهاتون رو قرار بدید.
چرا nvarchar؟

salmah
یک شنبه 20 دی 1394, 21:39 عصر
تا جایی که من میدونم چون int 4 byte
اشغال میکنه این مشکل ایجاد شده
الان من چ کار کنم
از گرید ویو به صورت ویزادی استفاده کرم

salmah
دوشنبه 28 دی 1394, 18:27 عصر
138483
وقتی مقداری که به عنوان )20(nchar ذخیره کردم را انتخاب می کنم مقداری فضای خالی داره علت چیه

xsbehx
دوشنبه 28 دی 1394, 21:10 عصر
اگر مشکلتون فضای خالیه:
به این خاطره که وقتی شما می گید nchar(20) یعنی 20 تا کارکتر و لا غیر!
پس اگر داده شما 1 کارکتر هم باشه 19 تای دیگه رو با فضای خالی پر می کنه یعنی 1 کارکتر و 19 تا اسپیس
ولی اگر می نوشتید nvarchar(20) به همون تعد یک کارکتر براتون فضا اشغال می کنه
البته همونطور که دوستان گفتند، کلید خارجی رو همیشه یک فیلد جداگونه در نظر بگیرید و نوعش رو هم بسته به جدولتون int یا ... بصورت identity قرار بدید