نمایش نتایج 1 تا 10 از 10

نام تاپیک: نظرسنجی در مورد پیادسازی بخشی از بانک

  1. #1

    نظرسنجی در مورد پیادسازی بخشی از بانک

    دوستان من یک بانک دارم که اطلاعات دبیرخانه توش ذخیره می شه
    من می خوام ستونهای مکاتبه - دسته - اهمیت و .... بصورت عددی بذارم

    و در زمان نمایش با استفاده از Select case در SQL به کاربر نشون بدم که مثلا عدد 1 یعنی وارده - 2 یعنی صادره و ....


    به نظر شما بین تعداد رکوردهای بالا دستور Case باعث کاهش سرعت کوئری نمی شه ؟
    و یا بهتر هست که من فیلدها رو بصورت Varchar تعریف کنم و عنوان رو در داخل فیلد بنویسم !!!



    ASP.NET MVC / Entity Framework / Design Pattern
    XCode Objective-C IOS Developer



  2. #2

    نقل قول: نظرسنجی در مورد پیادسازی بخشی از بانک

    سلام.شما میتونی یک جدول دیگه برای ستونهایی که میخوای عدد وارد کنی بذاری و هنگام select با این جدول join کنی که هم مقدارش رو بهت نشون میده هم از تکراری شدن جلوگیری میکنه هم کندی case رو نداره.
    موفق باشید

  3. #3

    نقل قول: نظرسنجی در مورد پیادسازی بخشی از بانک

    فکر نمی کنم دیگه اینقدر هم مساله پیچیده باشد که بخواهید اطلاعات را داخل یک جدول دیگه درج کنید!
    کافی است که از یک ستون Computed Column در هر جدولی که دوست داشتین استفاده کنید.
    در این صورت نه نیاز به JOIN دارید نه نیاز به استفاده از تابع CASE در هر دستور SELECT Statement.
    یعنی یکبار یکجا و برای همیشه این کار را انجام می دهیم!

    به مثال زیر توجه کنید فکر کنم کاملا گویا باشد.



    DECLARE @Sample TABLE
    (
    GenderID INT,
    GenderName AS (CASE GenderID WHEN (0) THEN N'نامعلوم'
    WHEN (1) THEN N'مرد'
    WHEN (2) THEN N'زن'
    END)
    )

    INSERT @Sample
    SELECT 1 UNION ALL
    SELECT 2 UNION ALL
    SELECT 0

    SELECT * FROM @Sample
    /*
    GenderID GenderName
    ----------- ----------
    1 مرد
    2 زن
    0 نامعلوم
    */



    وبلاگ من (Advanced SQL Querying)

  4. #4

    نقل قول: نظرسنجی در مورد پیادسازی بخشی از بانک

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

  5. #5

    نقل قول: نظرسنجی در مورد پیادسازی بخشی از بانک

    این در حالتی خواهد بود که ستون محاسباتی ما از نوع مجازی باشد ولی اگر این ستون را با کمک PERSISTED تبدیل به یک ستون فیزیکی کنیم در هنگام گرفتن Query بالاترین سرعت را خواهد داشت!
    یعنی Query ما بدون هیچ بررسی و شرطی تمام سطرهای جدول را استخراج خواهد کرد.
    و بررسی تنها زمان درج و بروزرسانی انجام خواهد گرفت.
    وبلاگ من (Advanced SQL Querying)

  6. #6

    نقل قول: نظرسنجی در مورد پیادسازی بخشی از بانک

    خوب این در صورتی هست که بخواهیم در یک جدول استفاده کنیم.ولی وقتی بخواهیم همین مقادیر رو در جداول دیگه استفاده کنیم یا در حالت گزارشگیری روش جالبی نیست و همش باید ستونهای محاسباتی ایجاد کنیم.!!!

  7. #7

    نقل قول: نظرسنجی در مورد پیادسازی بخشی از بانک

    اگر متن پست اول را بخوانید ایشون می خواهند چندین ستون را به این شکل در بیاورند مثلا ستونهای مکاتبه، دسته، اهمیت و ... .
    حالا به گفته شما برای هر کدام از این ستون ها باید یک جدول جدا طراحی کنیم. از طرفی مدیریت این جداول را باید در نظر بگیریم که به پیچیدگی بانکمان می افزاید.
    از طرفی Join یک عمل بسیار پر هزینه است، در واقع join یک زیر مجموعه ای از time/cross را بر می گرداند که شرط مورد نظر برقرار باشد.
    حالا با فرض اینکه در جدول اصلی 1 هزار رکورد و در هر جدول فرعی 10 رکورد باشد در نتیجه کامپیوتر مجبور خواهد بود به تعداد 1000*10 رکورد را برگرداند و رکورد ها را بر اساس Condition مورد نظر فیلتر کند. و در حالتی که چهار جدول اصلی که هر کدام 1000 رکورد داشته باشند را بخواهیم با یکدیگر Join کنیم مجبوریم که از جداول کمکی استفاده کنیم و با فرض اینکه هر جدول کمکی 10 رکورد داشته باشد در نتیجه کامپیوتر مجبور است به تعداد سطر زیر را بر گرداند:
    1000*1000*1000*1000*10*10*10*10
    و در پست اول حرفی از انعطاف پذیری گفته نشده است، تنها به سرعت اجرای Query اشاره شده.
    اصلا روش شما عالی خودتون هم عالی
    وبلاگ من (Advanced SQL Querying)

  8. #8

    نقل قول: نظرسنجی در مورد پیادسازی بخشی از بانک

    سلام.روش شما هم عالی.خوب شما هم عالی. ولی مشکل اینه تمامی اون مقادیر میشه در یک جدول باشه. و ضرب شما هم غلطه. زیرا فقط به جای مقدارش نامشو میاره.در هرصورت موفق باشید.

  9. #9

    نقل قول: نظرسنجی در مورد پیادسازی بخشی از بانک

    ضرب شما غلطه
    من درست متوجه نمی شوم، همه ی ما می دونیم که ضرب جدول به شکل زیر بوده:



    select *
    from
    (
    select a=1 union all
    select 2 union all
    select 3
    )D1,
    (
    SELECT b='a' union all
    select 'b' union all
    select 'c'
    )D2
    --(9 row(s) affected)



    و اینم می دونیم که ماده ی WHERE باید بعد از عمل JOIN انجام بشه در نتیجه ما زیر مجموعه ای از ضرب دو جدول را با شرطی که روی سطرهای جدول می گذاریم بدست می آوریم.



    select *
    from
    (
    select a=1 union all
    select 2 union all
    select 3
    )D1,
    (
    SELECT b='a' union all
    select 'b' union all
    select 'c'
    )D2
    where cast(D1.a as CHAR)=D2.b
    --(0 row(s) affected)
    وبلاگ من (Advanced SQL Querying)

  10. #10

    نقل قول: نظرسنجی در مورد پیادسازی بخشی از بانک

    مقایسه ی Plan دو Query زیر خود گویای همه چیز است.

    --============
    --== QUERY 1 ===
    --=============
    select *
    from
    (
    select a=1 union all
    select 2 union all
    select 3
    )D1,
    (
    SELECT b='a' union all
    select 'b' union all
    select 'c'
    )D2
    WHERE cast(D1.a as CHAR)=D2.b
    --============
    --== QUERY 2 ===
    --=============
    select *
    from
    (
    select a=1 union all
    select 2 union all
    select 3
    )D1 INNER JOIN
    (
    SELECT b='a' union all
    select 'b' union all
    select 'c'
    )D2
    ON cast(D1.a as CHAR)=D2.b


    عکس های ضمیمه عکس های ضمیمه
    وبلاگ من (Advanced SQL Querying)

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •