درباره نویسنده

فرید طاهری

فرید طاهری

فرید طاهری هستم، بنیانگذار و مدیریت نیک آموز. برنامه نویسی، بازاریابی و مهمترین کارم ایده پردازی در مورد 0 تا 100 نیک آموز هست.

9 Comments

  1. حمیدقلیپور

    حمیدقلیپور

     با سلام و احترام
    مگر این فایل ها رایگان نیست پس چرا اجازه دسترسی به دانلود محدود شده؛ لطفا بررسی بفرمایید
    با تشکر

    پاسخ دادن
  2. حمیدقلیپور

    حمیدقلیپور

      با سلام و احترام

    یه سوالی راجع به انتخاب نوع فیلد کلیداصلی مطرح میشه ، اکثر برنامه نویسان میگن اگه بروی این فیلد عملیات ریاضی صورت نمیگیره بهتره از نوع کاراکتری در نظر گرفته بشه ، اما شما اینجا از نوع int در نظر گرفتید. این موضوع رو توضیح میفرمایید؟
    با تشکر
    پاسخ دادن
    1. مسعود طاهری

      مسعود طاهری

      انتخاب کلید اصلی به عنوان کارکتر زیاد جالب نیست. چون عدد حجم کمتری نسبت به کارکتر می گیرد. مثال Int حجم حافظه ای معادل ۴ بایت دارد.

      اگر کلید اصلی شما بوسیله یک Unique Clustered Index کنترل شود  باید در نظر داشته باشید که به واسطه کلاستر ایندکس چینش فیزیکی رکوردها بر اساس کلید ایندکس خواهد بود.
      یک ایده مناسب برای طراحی جداول می توانه ایده زیر با در نظر گرفتن نکات زیر باشه
      ۱- PK فیلد عددی باشه. اگر PK عدد نداشتین Identity د رنظظر بگیرید. همچنین فیلد PK به صورت یک Unique Non Clustered باشه
      ۲- چینش فیزکی رکوردها بر اساس یک کلاستر ایندکس در نظر گرفته شود. که عموما Business Key می باشد.
      مثال جدول سفارش ها را در نظر بگیرید. (OrderHeader) قرار است بیش از ۲۰ میلیون سفارش داخل آن ایجاد شود.PK این جدول فیلد سریال سفارش (OrderID) بوده که می تواند به صورت یک Unique Non Clustered  باشد.
      چینش فیزیکی رکوردها این جدول و یا کلاستر ایندکس آن می تواند بر اساس فیلدی باشد که حجم زیادی از Selectها و گزارش گیری بر اساس آن اتفاق می افتاد برای مثال فیدل تاریخ سفارش. البته در بحث طراحی کلاستر ایندکس باید در نظر داشت که کلاستر ایندکس بهتر است Unique باشد. در این حالت بهتر است تاریخ سفارش + OrderID به عنوان کلاستر ایندکس در نظر گرفته شود.
      در آخر باید بگم
      ۱- بهتر است PK به عنوان عدد در نظر گرفته شود
      ۲- مثالی که ذکر شد یک حالت خیلی پیشرفته است که در هر جایی نباید از این حالت استفاده کرد. باید تمامی جوانب کار برای انجام آن را در نظر گرفت. شاید در سیستم های خیلی خیلی بزرگ باید چند جدول را به آن سمت مجبور شوید هدایت کنید
      حالتی که در فیلم آموزشی شرح داده شده جوابگوی کار اکثر دوستان بوده و می تواند به عنوان الگو از آن استفاده نمود
      پاسخ دادن
  3. حمیدقلیپور

    حمیدقلیپور

     با تشکر از پاسخ گرم شما استاد طاهری

    منظورم از نوع کاراکتری NVARCHAR بود که درونش با اعداد مقدار دهی بشه ؛ در این رابطه نظرتون رو ارائه میدید 
    با تشکر
    پاسخ دادن
  4. حمیدقلیپور

    حمیدقلیپور

        با سلام و احترام

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

      مسعود طاهری

      منظورتان چه ایندکسی ااست : کلاستر یا NonClustered ؟

      در جداول اشخاص می توان کلید کلاستر ایندکس را بر اساس ID ایجاد کرد. که این موضوع با ایجاد PK شما مرتفع می شود
      اگر می خواهید که جستجو بر اساس کد ملی انجام شود می توان از ایندکس NonClustered به ازای آن استفاده کرد در شرایطی هم می توان این نوع ایندکس را به صورت Cover ساخت. (محصول جنون سرعت مفهوم Cover Index بررسی شده است)
      همچنین شرط استفاده از ایندکس Non Clustered به خیلی چیزها بر می گردد یکی از مفاهیم Tipping Point و… است
      اگر کد ملی عددی باشد خیلی خوب است اما باید در نظر داشته باشید که برخی از کدهای ملی با۰۰ شروع می شود برای نمایش آنها باید mask مربوطه را در سمت کلاینت انتخاب نمایید و یا از قابلیت های SQL 2016 برای این مورد استفاده کنید
      موفق باشید 
      پاسخ دادن
      1. حمیدقلیپور

        حمیدقلیپور

          منظورم ایجاد یک Primary Key بود که می شود همون Clustered Index   خوب حالا چطور؟ میدونید کسی این بحث با بنده شروع کرد گفت چرا بجای کد ملی از ID استفاده کردی با توجه به آموزش های شما توضیح دادم اما قانع نشد ، گفت اگه کوئری بر اساس کد ملی باشه چطور سرعت و Performance  بالاتر میره؟ نتونستم جواب بدم و برای خودم هم سوال شده؟

        با تشکر
      2. مسعود طاهری

        مسعود طاهری

        خوب اما باید در نظر داشته باشید.

        ۱- همیشه قرار نیست چینش رکوردهای جدول (کلاستر ایندکس) بر اساس عامل جستجو (فیلد مورد نظر) باشد.
        شما می توانید اینکار را انجام دهید
        آیا همیشه جدول شما جستجو  بر اساس کد ملی دارد؟ معمولا در جداول اشخصا اینگونه نمی باشد. اکثر جستجو بر اساس نام خانوادگی است.
        برای اینکار بهتر است ID به صورت PK و کلاستر ایندکس باشد
        اما اگر جستجو حتما بر اساس کد ملی است و این کد جزء اقلام اجباری است می توانید این مورد را در نظر داشته باشید. (برای مثال فرض کنید سیستمی که Base و مبنای Unique بودن اشخاص + اعمال خدمات و… بر اساس کد ملی است)
        ۱- PK را به عنوان فیلد ID در نظر بگیرید البته به صورت NonClustered Index
        2- فیلد کلاستر ایندکس جدول را کد ملی در نظر بگیرید
        ۳- برای کلاستر ایندکس Fillfactor تعریف کنید 
        4- وضعیت Fragmentation جدول را کنترل کنید
      3. حمیدقلیپور

        حمیدقلیپور

            با سپاس فراوان از پاسخ بسیار پر مغز و روشن شما

        سرسبز باشید.

ارسال نظر

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

تمامی حقوق مادی و معنوی این وب سایت متعلق به نیک آموز می باشد.
این سایت توسط تیم آموزش برنامه نویسی نیک آموز مدیریت می شود.