টেবিল একটি খারাপ অভ্যাস aliasing হয়?


21

আমার মনে আছে মাস্টার অফ ইনফরমেশন সার্ভিসেস শিক্ষার্থীদের জন্য একটি ডিবিএমএস কোর্সে এটি করা শিখছি। নিজেকে কিছু টাইপ করে বাঁচাতে, আপনি টাইপ করতে পারেন:

SELECT t1.id, t2.stuff 
FROM 
              someTable    t1 
   INNER JOIN otherTable   t2 
      ON t1.id=t2.id
;

তবে ... সঞ্চিত পদ্ধতিতে কেন এটি গ্রহণযোগ্য? দেখে মনে হচ্ছে এটি অত্যন্ত ক্ষুদ্র পরিমাণের সময় সাশ্রয় করার সাথে সাথে বিবৃতিটির পঠনযোগ্যতার ক্ষতি করছে। এটি করার কোনও কার্যকরী বা যৌক্তিক কারণ আছে কি? এটি অপসারণের চেয়ে অস্পষ্টতা যুক্ত করেছে বলে মনে হয়; এই ফর্ম্যাটটি ব্যবহার করার জন্য আমি দেখতে পাচ্ছি কেবলমাত্র যদি আপনি কোনও শব্দার্থিক অর্থপূর্ণ উপন্যাস যোগ করেন - উদাহরণস্বরূপ FROM someTable idsTable- যখন টেবিলের নামটি যথেষ্ট বর্ণনামূলক না থাকে।

টেবিলটি কী খারাপ অভ্যাসকে ছাড়িয়ে যাচ্ছে বা এটি কেবলমাত্র একটি সহায়ক সিস্টেমের অপব্যবহার?


8
আপনি যখন এসকিউএল এর কয়েক হাজার লাইন লিখেছেন, আপনি সংরক্ষণিত টাইপিংয়ের প্রশংসা করবেন। এটি এমন একটি ক্ষেত্রে যেখানে যত্ন সহ ব্যবহার করা হয়, আপনি বজায় রাখতে সামান্য বা কোনও ব্যয় করে বর্ধিত উত্পাদনশীলতা কিনতে পারেন।
সমস্ত ব্যবসায়ের জন

6
আমি লিখেছি এমন প্রতিটি ক্যোয়ারী যা একটি টেবিল দিয়ে শুরু হয়েছিল অবশেষে আরও বেশি সারণী ঘিরে রাখে ("এটি দুর্দান্ত, তবে আপনি কি ফু যোগ করতে পারেন?")। প্রতিটি কলাম সামনে রেখে আপনার জীবনকে সহজ করে দেবে।
বিলিংক

সমস্ত প্রশ্নের মধ্যে সমস্ত টেবিলকে দূরে রাখার এই খুব সাধারণ অভ্যাসটি সম্পর্কে আমি কেবল দেখতে পাচ্ছি যে কখনও কখনও সৃজনশীল বিকাশকারী একটি দুষ্টু শব্দকে কোডের মধ্যে স্লিপ করতে পরিচালিত করে!
নিডহ্যাক

শুধু কেন নয় select id, stuff from someTable natural join otherTable?
কলিন টি হার্ট

উত্তর:


39

টেবিল এলিয়াসিং একটি সাধারণ এবং সহায়ক অনুশীলন।

  • আপনার প্রশ্নের কোথাও কোথাও কলামগুলি রেফারেন্স করার সময় এটি আপনাকে কীস্ট্রোকগুলি সংরক্ষণ করে
  • আপনি যখন অনেকগুলি সারণী উল্লেখ করছেন তখন এটি আপনার এসকিউএল এর পঠনযোগ্যতার উন্নতি করে । এলিয়াস আপনাকে সেই টেবিলগুলিকে একটি ছোট নাম এবং এটি কীভাবে ব্যবহার করা হচ্ছে তার সামান্য অর্থ দিতে দেয়।
  • এমনকি আপনি যখন কোনও টেবিলটি নিজের সাথে যোগ দেন বা একই টেবিলে একাধিকবার যোগদান করেন তখন এটি এমনকি প্রয়োজন। এটি এমন হয় যাতে কোয়েরি অপ্টিমাইজার আপনি কোনও কলামের উল্লেখ করার সময় কোন টেবিলটি উল্লেখ করছেন তা জানেন।

নিম্নলিখিত প্রতিবেদনের নির্যাস উপরের সমস্ত বিষয়গুলি সুন্দরভাবে চিত্রিত করে:

INSERT INTO reporting.txns_extract
SELECT 
    -- 30+ columns snipped
    -- 
    -- Would you want to type out full table names for each 
    -- column here?
FROM 
    -- ... and in the JOIN conditions here?
                billing.financial_transactions  ft_cdi   -- alias required here
    INNER JOIN  
                billing.cash_application_links  cal
            ON  ft_cdi.key_num = cal.applied_ft_key_num
    INNER JOIN  
                billing.financial_transactions  ft_pmt   -- alias required here
            ON  cal.owner_key_num = ft_pmt.key_num
    LEFT OUTER JOIN
                billing.invoice_lines           invl
            ON  ft_cdi.key_num = invl.invoice_key_num
    LEFT OUTER JOIN
                billing.charges                 chrg
            ON  invl.creator_key_num = chrg.key_num
    LEFT OUTER JOIN
                billing.customer_services       cs
            ON  chrg.cs_key_num = cs.key_num
    INNER JOIN
                billing.billers                 bil
            ON  ft_cdi.biller_account_key_num = bil.biller_account_key_num
    INNER JOIN
                billing.formal_entities         fe
            ON  bil.frml_key_num = fe.key_num
WHERE
    -- ... and in the WHERE conditions here?
        ft_cdi.transaction_type <> 'Payment'   -- alias tells me this table is not for payments
    AND ft_cdi.status = 'Approved'
    AND ft_pmt.transaction_type =  'Payment'   -- alias tells me this table is for payments
    AND ft_pmt.status = 'Approved'
    AND ft_cdi.last_user_date >   ft_last_user_date_begin
    AND ft_cdi.last_user_date <=  ft_last_user_date_end
;

2
যে সকল লোকেরা প্রচুর এসকিউএল লিখেছেন এবং পড়েছেন তাদের জন্য উপাধি বেশি পঠনযোগ্য। তারা নতুন ডাটাবেস বিকাশকারীদের জন্য কম পঠনযোগ্য, তবে আমি মনে করি এটি যে কোনও বাধা তাড়াতাড়ি বা পরে যেভাবেই হোক পরিষ্কার করতে হবে।
মাইক শেরিল 'ক্যাট রিক্যাল'

7
আমি আন্তরিকভাবে অর্থপূর্ণ এলিয়াসগুলির পরামর্শ দিচ্ছি। টি 1, টি 2 ... বা এ, বি, বি, সি, ডি, ই এর পরিবর্তে অর্থবহ এলিয়াস সহ একটি উদাহরণ দেখতে পারা সত্যিই দুর্দান্ত লাগবে যখন আপনি কর্মীদের একটি, ঠিকানা বি এর মতো উপাধি পেয়ে যাবেন তখন তা সত্যিই বিভ্রান্ত হতে পারে , অ্যাকাউন্ট সি, বিলিং ডি, গ্রাহকগণ ই।
বিলথোর

4
আমি মনে করি সহজেই রক্ষণাবেক্ষণের জন্যও প্রতিটি কলামের রেফারেন্সে উপনামটি ব্যবহার করা গুরুত্বপূর্ণ। নিশ্চিত যে কেবল একটি টেবিলের ক্ষেত্রটির নাম জাইজ্যাঙ্ক, তবে কোনটি? যখন আপনি জটিল রিপোর্টিং কোয়েরি লিখেন, সর্বদা আপনার ক্ষেত্রগুলি কোথায় রূপ নিয়েছে তা জেনে রাখা সহায়ক।
এইচএলজিইএম

1
আপনি যখন কোনও উদ্ভূত টেবিলে যোগদান করেন তখন এটিরও প্রয়োজন হয়।
এইচএলজিইএম

@ এইচএলজিইএম - উভয়ই চমৎকার পয়েন্ট।
নিক চামাস

12

আমার মনে হয় এলিয়াসগুলি ব্যবহার করা যদি কোনও প্রশ্নের উত্তর পাঠযোগ্য হয় তবে যদি টেবিলের নামগুলি একে অপরের সাথে লম্বা হয় বা এর সাথে একই রকম হয় যে কেউ এটি দ্রুত পড়তে পারে তবে তাদের ভুল হতে পারে। আপনি কি মনে করেন যে এটি ...

SELECT Really_long_table_name.ID,
       Even_longer_table_name_than_before.Name,
       Even_longer_table_name_than_before.Description,
       Even_longer_table_name_than_before.State
FROM   Really_long_table_name
       INNER JOIN Even_longer_table_name_than_before
               ON Really_long_table_name.ID = Even_longer_table_name_than_before.ID
WHERE  Really_long_table_name.Department = 'Whatever' 

এর চেয়ে বেশি পাঠযোগ্য?

SELECT a.ID,
       b.Name,
       b.Description,
       b.State
FROM   Really_long_table_name a
       INNER JOIN Even_longer_table_name_than_before b
               ON a.ID = b.ID
WHERE  a.Department = 'Whatever' 

আপনি টেবিলের উপকরণ হিসাবে যা ব্যবহার করেন তার উপর নির্ভর করে এটি কোনও ব্যক্তিকে পড়ার এবং বোঝার জন্য ক্যোয়ারীটিকে আরও সহজ করে তুলতে পারে।


2
আমি সর্বদা অনুসন্ধান করতে এবং বিকাশকারীদের হত্যা করতে চাই যা তাদের টেবিলগুলিকে উরফ দেয় না (আক্ষরিক অর্থে নয়)। এই প্রথম উদাহরণটি আমার চোখকে রক্তক্ষরণ করে। এবং কোনওভাবে তারা যখন এটি করে তখন তারা তাদের কোড তৈরি করে না যাতে আমি এগুলি খুব বেশি স্ক্রোল না করে দেখতে পারি (ঠিক যেমন আপনি করেছেন)।
এইচএলজিইএম

5

টেবিল এলিয়াসিং (ছোট টেবিলের নামের জন্য) খারাপ অভ্যাস নয়।

টেবিলের নামগুলি দীর্ঘ হলে আমি সাধারণত এটি ব্যবহার করি এবং তারপরে কেবল সেইরকম নাম ব্যবহার করা হয় যা বোধগম্য হয়:

SELECT tTable.stuff FROM track_table tTable;

আপনি যদি পঠনযোগ্যতা উন্নত করতে চান তবে আপনি ASকীওয়ার্ডটি ব্যবহার করতে পারেন :

SELECT tTable.stuff FROM track_table AS tTable;

কিন্তু, আপনি যেমন সিনট্যাক্সটি ব্যবহার করতে অভ্যস্ত হন, তেমন প্রয়োজন হয় না।


0

আপনি আপনার প্রশ্নের পঠনযোগ্যতা উল্লেখযোগ্যভাবে বাড়াতে এটি ব্যবহার করতে পারেন। একটি সংক্ষিপ্ত নাম ব্যবহার করার পরিবর্তে, আপনি যে ডেটাতে যোগ দিচ্ছেন তা বর্ণনা করতে আপনার উপনামটি ব্যবহার করুন for

SELECT
    transaction.unique_id,
    authorisingUser.name AS authorising_user_name,
    requestingUser.name AS requesting_user_name
FROM transactions AS transaction
JOIN users AS authorisingUser
    ON authorisingUser.user_id = txn.authorising_user_id
JOIN users AS requestingUser
    ON requestingUser.user_id = txn.request_user_id

অত্যন্ত সংক্ষিপ্ত উপনামগুলি (যেমন aবা t1) ব্যবহার করার সময় আপনার উপনামটির অর্থ কী তা জানতে অনুসন্ধানের প্রয়োজন অনুসারে গিয়ে অনুসন্ধানটি পড়তে অসুবিধা করতে পারে, একটি নামকৃত উপন্যাস প্রায়শই কেবল টেবিলটি ব্যবহার না করে কোয়েরিকে আরও পাঠযোগ্য করে তুলতে পারে নাম থাকবে না।


-1

এটি "খারাপ অভ্যাস" সম্পর্কে একটি প্রশ্ন। উত্তরগুলি "কী-স্ট্রোক সংরক্ষণ করা" সম্পর্কিত বলে মনে হচ্ছে।

ব্যক্তিগতভাবে, আমার কোডিং গতি আমার চিন্তার গতি দ্বারা সীমাবদ্ধ, আমার টাইপিং গতি দ্বারা নয়। টেবিলের নামগুলি নিজেরাই ব্যবহার করে এমন কোডের চেয়ে আমি প্রচুর টেবিল এলিয়াস সহ কোড পড়ি much টেবিলের উপাধি ইন্ডিয়ারেশনের আরও একটি স্তর যুক্ত করে।

তবে বেশিরভাগ প্রোগ্রামাররা টেবিল এলিয়াস ব্যবহার করেন (যদিও আমি তা করি না)। কিছু "এসকিউএল ডেভলপমেন্ট এনভায়রনমেন্টস" এটি করা খুব সহজ করে তোলে এবং কিছু শিক্ষক স্বয়ংক্রিয়ভাবে টেবিল এলিয়াসগুলি শেখায়, বিশেষত "যোগদান" সিনট্যাক্স শেখার অংশ হিসাবে।

টেবিল এলিয়াস ব্যবহার করা খারাপ অভ্যাস নয়, তবে কখনও কখনও আমাকে কোডের মধ্য দিয়ে যেতে হবে এবং কী চলছে তা বোঝার জন্য মূল টেবিলের নাম দিয়ে বিকল্পটি প্রতিস্থাপন করতে হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.