درحال حاضر، باتوجه به خرده نداشتن مقادیر پولی در ایران، عموما از نوعهای int و bigint برای ذخیره سازی این مقادیر استفاده میشود؛ اما در آینده با احتمال حذف تعدادی از صفرها، نیاز به ثبت خردهها هم ضروری خواهد بود و در اینجا این سؤال مهم مطرح میشود که نوع دادهای مناسب برای انجام اینکار چیست؟ برای نمونه در SQL Server، نوعهای دادهای decimal، money، smallmoney و امثال آن وجود دارند که در این مطلب، تفاوتهای مهم آنها و روش صحیح انتخاب نوع دادهای مناسب مخصوص اینکار را بررسی خواهیم کرد. مشکل مهم نوع دادهای int جهت ذخیره سازی مقادیر پولی فرض کنید جدول سادهای را با دو فیلد Id و Price دارید که نوع مبلغ آنرا با توجه به عدم داشتن خرده در واحد پولی، int انتخاب کردهاید: CREATE TABLE [Test1]( [Id] [int] IDENTITY(1,1) NOT NULL, [Price] [int] NOT NULL, CONSTRAINT [PK_Test1] PRIMARY KEY CLUSTERED ( [Id] ASC )); اگر در این جدول فقط 7 رکورد زیر را ثبت کنیم: Insert into Test1 values (1000000000),(1000000000),(1000000000),(1000000000),(1000000000),(1000000000),(1000000000) به نظر شما خروجی کوئری سادهی زیر که جهت نمایش جمع مبالغ وارد شده تهیه شده، چیست؟ select sum(price) from Test1 خروجی آن فقط استثنای زیر است! Arithmetic overflow error converting expression to data type int. عنوان میکند که جمع آن از بازهی اعداد صحیح خارج شدهاست و در سیستمی که نوع مبالغ آنرا int انتخاب کردهاید، دیر یا زود به این مشکل خواهید رسید. فقط کافی است کاربران، یکسالی با آن برنامه کار کنند! برای حل این مشکل میتوان به صورت موقت، نوع دادهای را به bigint تبدیل کرد و مجددا جمع رکوردها را محاسب, ...ادامه مطلب
از نوع دادهای decimal در SQL Server، بیشتر برای انجام کارهای تجاری و ذخیرهی قیمتها و مبالغ استفاده میشود؛ جائیکه اعداد و ارقام خیلی سریع بزرگ میشوند و گاهی از اوقات ممکن است به همراه اعشار هم باشد. اما ... کار با آنها در SQL Server نیازمند نکات ویژهای است که اگر ندید گرفته شوند، محاسبات نادرستی را سبب خواهند شد! مفهوم تعریف نوع decimal پیشفرض در SQL Server فرض کنید از EF پیش از EF Core استفاده میکنید که به صورت پیشفرض، نوع System.Decimal را در مدلهای شما به همان decimal در SQL Server نگاشت میکند. فکر میکنید در این حالت خروجی کوئریهای زیر چه چیزی خواهد بود؟ select '0.4400' as Expected , cast(0.4400 as decimal) as Actual select '1.3200' as Expected, cast(1.3200 as decimal) as Actual select '1.7600' as Expected, cast(1.7600 as decimal) as Actual select '65.0000' as Expected, cast(65.0000 as decimal) as Actual select '99.50' as Expected, cast(99.50 as decimal) as Actual این خروجی را در تصویر ذیل مشاهده میکنید. در اینجا خصوصا به مورد صفر دقت کنید: علت اینجا است که از دیدگاه SQL Server، نوع decimal پیشفرض، دقیقا به معنای decimal(18,0) است که به آرگومان اول آن، precision و به آرگومان دوم آن، scale میگویند. یعنی حداکثر چه تعداد رقم دسیمال، پیش از ممیز و چه تعداد عدد دسیمال، پس از ممیز قرار است در این نوع داده ذخیره شوند. بنابراین باتوجه به اینکه در حالت پیشفرض، مقدار scale و یا همان تعداد ارقام مجاز پس از ممیز، صفر است، عدد ارائه شده، به نزدیکترین عدد صحیح ممکن، گرد خواهد شد. به همین جهت برای رفع این مشکل، باید دقیقا مشخص کرد , ...ادامه مطلب
انواع دادهها، جنبهی ضروری هر زبان برنامه نویسی هستند و Rust نیز از این قاعده مستثنا نیست. در Rust از انواع داده برای تعریف نوع دادهای که یک متغیر میتواند نگه دارد استفاده میشود. این مقاله رایجترین انواع داده در Rust را پوشش میدهد، از جمله: Boolean Unsigned int Signed int Floating point numbers Char String types Arrays Tuples Type aliasing Boolean در Rust، نوع داده بولین با کلمه کلیدی bool نشان داده میشود. این نوع داده، فقط میتواند دو مقدار داشته باشد: true یا false و معمولاً در دستورات شرطی و حلقهها برای کنترل جریان یک برنامه استفاده میشود. let is_rust_awesome: bool = true; Unsigned int اعداد صحیح بدون علامت در Rust با کلمه کلیدی u و سپس تعداد بیتهایی که عدد صحیح باید داشته باشد، نشان داده میشوند. به عنوان مثال، u8 یک عدد صحیح بدون علامت 8 بیتی را نشان میدهد. محدودهی یک عدد صحیح بدون علامت از 0 تا 2^n - 1 است که n تعداد بیتها است. let x: u8 = 255; Signed int اعداد صحیح علامتدار در Rust با کلمهی کلیدی i و سپس تعداد بیتهایی که عدد صحیح باید داشته باشد، نشان داده میشوند. به عنوان مثال، i32، یک عدد صحیح علامتدار 32 بیتی را نشان میدهد. محدوده یک عدد صحیح علامتدار از -2^(n-1) تا 2^(n-1) - 1 است که n تعداد بیتها است. let x: i32 = -2147483648; Floating point numbers اعداد ممیز شناور در Rust با کلمات کلیدی f32 یا f64 نشان داده میشوند که به ترتیب مخفف اعداد ممیز شناور 32 بیتی و 64 بیتی هستند. این نوع دادهها برای نم, ...ادامه مطلب
بسیاری از مهندسان دادهکاوی، برنامهنویسان و افراد فعال در حوزههایی مانند ماشین لرنینگ، هر روزه با دادهها سر و کار دارند و اگر ساختارهای داده را به خوبی نشناسند، ممکن است گاهی اوقات با مشکلاتی روبهرو شوند. درک مباحثی همچون ساختمان داده به افراد کمک میکند تا آسانتر با دادهها کار کنند و درک عمیقتری از آنها داشته باشند. این موضوع به قدری مهم است که در برخی از مصاحبههای استخدامی که در زمینه برنامهنویسی و مهندسی داده صورت میگیرد، یکی از رایجترین سوالات مربوط به مفهوم ساختمان داده است. در این مطلب از شرکت نرم افزاری وب نگاه به بررسی مفهوم ساختمان داده و انواع مختلف آن میپردازیم. در ادامه با ما همراه باشید. مفهوم ساختمان داده یا Data Structures اگر بخواهیم ساختمان داده را به زبان ساده توضیح دهیم، میتوانیم بگوییم که ساختمان داده مانند یک ظرف برای دادهها است که دادهها را با قالبی خاص در خود ذخیره میکند. اینکه در ذخیرهسازی دادهها، آنها شکلی خاص ذخیره میشوند، گاهی میتواند کاربرد ساختمان داده را بیهوده کند. در برخی از موارد میتواند بسیار کاربرد داشته باشد. به همین دلیل، شما همیشه باید توجه داشته باشید که برای هر موقعیت و کاری از یک ساختمان داده بهینه استفاده کنید اهمیت استفاده از ساختمان داده در چیست؟ دادهها مهمترین موارد در علم کامپیوتر هستند و هر شخصی که امروزه با کامپیوتر سروکار دارد، با داده نیز روبهرو است و به همین دلیل بهتر است برای پیش بردن راحتترِ کارها با مباحثی مانند ساختمان داده آشنا باشد. همچنین همانطور که در قبل نیز گفته شد، در بسیاری از مصابحههای استخدامی که در زمینه برنامهنویسی و مهندسی انجام میگیرد، از افراد در رابطه با ساخ, ...ادامه مطلب
شاید این جمله را شنیده باشید: “جهان امروز، جهان اطلاعات است.” همانطور که این جمله به ما میگوید، امروزه در جهانی زندگی میکنیم که سرشار از اطلاعات و داده است و هر روز به مقدار آنها افزوده میشود. با مقدار زیاد اطلاعات و دادهای که در جهان امروز وجود دارد، گرایش کسب و کارها و بیزینسها به سمت استفاده از پایگاههای داده رفته است. کسب و کارها اغلب برای مدیریت بهینهی سیل عظیم دادههایشان، از پایگاه داده استفاده میکنند. مونگو دیبی (mongo DB) نیز یک پایگاه داده nosql است. در این مقاله از شرکت نرم افزاری وب نگاه به بررسی مفهوم پایگاه داده، پایگاه داده مونگو دیبی و کاربردهای آن میپردازیم. در ادامه با ما همراه باشید. پایگاه داده چیست؟ قبل از اینکه به سراغ بررسی مونگو دیبی برویم، شما نیازمندید تا با مفهوم پایگاه داده، آشنایی کامل داشته باشید. اگر بخواهیم پایگاه داده را به زبان ساده بیان کنیم، میتوانیم بگوییم که پایگاه داده شامل ذخیره و دستهبندی اطلاعات، در جهت دسترسی و مدیریت بهترِ آنها است. یک پایگاه داده دارای مجموعهای از جدول ها است که اطلاعات را بر اساس نوع آنها، در سطرهای مختلف دستهبندی میکند. بگذارید این مفهوم را با یک مثال برای شما توضیح دهیم: فرض کنید که شما یک فروشگاه دارید و نام و شماره تلفن هر فردی که از شما خرید میکند را مینویسید. حال میتوانید دفتر یا فایلی که اطلاعات مشتریها را در آن ذخیره میکنید، یک پایگاه داده بدانید. طبق توضیحی که از پایگاه داده ارائه شد، شما در دفترتان، نام و شماره تلفن هر فردی را در سطرهای مختص به آنها مینویسید. پایگاه داده nosql چیست؟ یک پایگاه داده nosql در سطح بالاتر و وسیعتری از پایگاه داده sql کار میکند و بسیار گستر, ...ادامه مطلب
مقدمه همانطور که میدانید، Blazor دارای یک سیستم لاگ گیری توکار است که میتوان از آن توسط تزریق ILogger در کامپوننتها بهره برد. این سیستم لاگ گیری در زمان توسعهی نرم افزار، در قالب یک کنسول، لاگها را به توسعه دهنده نشان میدهد. اما پس از تولید و پابلیش اپلیکیشن، دیگر این کنسول وجود ندارد. برای ذخیرهی لاگها در یک فایل متنی بر روی سرور هاست، میتوان از Serilog بهره برد که روش آن در اینجا توضیح داده شده است. حال اگر بخواهیم این لاگها را در یک پایگاه داده ذخیره کنیم چطور؟ ایجاد کلاس لاگ برای این منظور ابتدا کلاسی را برای ذخیرهی لاگها در پایگاه داده به شکل زیر ایجاد مینماییم: public class DBLog { public int DBLogId { get; set; } public string? LogLevel { get; set; } public string? EventName { get; set; } public string? Message { get; set; } public string? StackTrace { get; set; } public DateTime CreatedDate { get; set; }=DateTime.Now; } ایجاد دیتابیس لاگر کلاس DBLogger از اینترفیس ILogger ارث بری میکند و دارای سه متد است که مهمترین آنها متد Log میباشد که درحقیقت با هر بار فراخوانی Logger در برنامه فراخوانی میشود. برای مطالعهی بیشتر در رابطه با دو متد دیگر میتوانید به اینجا مراجعه نمایید. public class DBLogger:ILogger { private bool _isDisposed; private readonly ApplicationDbContext _dbContext; public DBLogger(ApplicationDbContext dbContext) { _dbContext = dbContext ?? throw new ArgumentNullExcept, ...ادامه مطلب
خب همانطور که میدانید حدود یک ماه به سالروز تولد کلش اف کلنز باقی است و تیم بدوگیم توانست برای اولین بار بین تمامی منابع به نسخه سرور تست سوپرسل دست پیدا کند. در این سرور جزییات مربوط به آپدیت های بعدی کلش تست میشود بنابراین از هم اکنون میتوانید آنچه را که روز تولد کلش در انتظار شماست را تجربه کنید!, ...ادامه مطلب