قرار دادن صفر در سمت چپ اعداد
صفر در سمت چپ یک عدد
جدول Products را در زیر داریم:
Prod_Id | ProductName | Unit | UnitPrice |
---|---|---|---|
00001 | Jarlsberg | 1000 g | 120000 |
00002 | Mascarpone | 1000 g | 9505000 |
00003 | Gorgonzola | 1000 g | 60200000 |
می خواهیم هنگام درج کردن محصولات، کد محصول همیشه، شامل 5 کاراکتر باشد.
از کوئری زیر استفاده می کنیم:
declare @max_ID char(5) select @max_ID=right( Replicate('0',5)+ cast( isnull( max( cast(Prod_ID as int) ) ,0 ) +1 as nvarchar ) ,5 ) from Products Insert into Products (prod_ID,ProductName,Unit,UnitPrice) Values(@max_ID,'Test','1000g',250000)
توجه: استفاده ازنوع داده های رشته ای به عنوان اندیس یا کلید اصلی، یک اشتباه در طراحی است.
توضیح: نوع داده varchar و هر نوع داده کاراکتری یا رشته ای بدترین نوع انتخاب برای اندیس جدول است. این اشتباه زمانی بدتر خواهد شد که از این فیلد به عنوان کلید اصلی نیز استفاده کنید؛ و سرانجام اشتباه با استفاده از این کلید به عنوان کلید خارجی تکمیل خواهد شد!
البته توجه داشته باشید که استفاده از فیلد اندیس کاراکتری در کنار کلید اصلی مشکل خاصی نخواهد داشت. فقط این مورد در صروت لزوم و زمانی که از آن فیلد به کرات برای جستجو استفاده می کنید مورد استفاده قرار دهید.
علت اشتباه بودن این انتخاب در ساخت جدول اندیس و تعداد مقایسه های انجام شده بر می گردد. به عنوان یک مثال ساده مقایسه، دو نوع عددی می توانند به راحتی توسط دستور عمل های CPU با یکدیگر مقایسه شوند، در حالی که درنوع کارکتری باید تک تک کارکاتر ها با استفاده از شبیه سازی نرم افزاری مقایسه شوند. در رشته های یونیکد هم که حجم کاراکتر ها دو برابر می شوند.
راه حل: راه حل بسیار ساده استفاده از انواع داده عددی مانند int یا bigint به عنوان کلید اصلی است. در عین حال می توانید در صورت نیاز از فیلد استفاده شده در مثال بالا نیز به عنوان یک فیلد اطلاعاتی نیز استفاده نمایید.
بنابراین:
Prod_ID | Prod_Code | ProductName | Unit | UnitPrice |
---|---|---|---|---|
1 | 00001 | Jarlsberg | 1000 g | 120000 |
2 | 00002 | Mascarpone | 1000 g | 9505000 |
3 | 00003 | Gorgonzola | 1000 g | 60200000 |
برای مشاهده فیلم های آموزشی مقدماتی تا پیشرفته پایگاه داده SQLServer کلیک کنید.
- نوشته شده توسط امیر پهلوان صادق
- بازدید: 9939