আমার টি-স্কয়ার শিক্ষক আমাদের বলেছিলেন যে আমাদের পিকে কলামের নামকরণ "আইডি" কোনও আরও ব্যাখ্যা ছাড়াই খারাপ অভ্যাস হিসাবে বিবেচিত হয়।
কেন একটি টেবিলের পিকে কলাম "আইডি" নামকরণ খারাপ অভ্যাস হিসাবে বিবেচিত হয়?
আমার টি-স্কয়ার শিক্ষক আমাদের বলেছিলেন যে আমাদের পিকে কলামের নামকরণ "আইডি" কোনও আরও ব্যাখ্যা ছাড়াই খারাপ অভ্যাস হিসাবে বিবেচিত হয়।
কেন একটি টেবিলের পিকে কলাম "আইডি" নামকরণ খারাপ অভ্যাস হিসাবে বিবেচিত হয়?
উত্তর:
আমি বেরিয়ে এসে এটি বলতে যাচ্ছি: এটি আসলেই খারাপ অভ্যাস নয় (এবং এটি হলেও এটি এটি খারাপ নয়)।
আপনি এই যুক্তিটি তৈরি করতে পারেন ( চাদ নির্দেশ করেছেন) যে এটি নীচের ক্যোয়ারির মতো ত্রুটিগুলি মাস্ক করতে পারে:
SELECT *
FROM cars car
JOIN manufacturer mfg
ON mfg.Id = car.ManufacturerId
JOIN models mod
ON mod.Id = car.ModelId
JOIN colors col
ON mfg.Id = car.ColorId
তবে আপনার টেবিলের নামের জন্য ক্ষুদ্র এলিয়াস ব্যবহার না করে সহজেই এটি প্রশমিত করা যায়:
SELECT *
FROM cars
JOIN manufacturer
ON manufacturer.Id = cars.ManufacturerId
JOIN models
ON models.Id = cars.ModelId
JOIN colors
ON manufacturer.Id = cars.ColorId
3 বর্ণের সংক্ষিপ্তকরণগুলি সর্বদা ব্যবহারের অনুশীলনটি কলামের নামটি ব্যবহার করার চেয়ে আমার কাছে আরও খারাপ id
। (বিন্দু হিসাবে কে: সংক্ষিপ্তসার cars
সঙ্গে টেবিলের নাম কে আসলে সংক্ষিপ্ত করবে car
? এর শেষটি কী করে?)
কথাটি হ'ল: ধারাবাহিক হোন। যদি আপনার সংস্থা আইডি ব্যবহার করে এবং আপনি উপরে ত্রুটিটি সাধারণত করেন তবে পুরো টেবিলের নাম ব্যবহার করার অভ্যাসটি পান। যদি আপনার সংস্থা আইডি কলামটি নিষিদ্ধ করে, তবে এটিকে ধীরে ধীরে নিন এবং যে নামকরণ কনভেনশনটি তারা পছন্দ করেন ব্যবহার করুন।
এ জাতীয় সমস্যাগুলি স্থগিত করার পরিবর্তে আসলে খারাপ অভ্যাসগুলি (যেমন একাধিক নেস্টেড কোলেলেটেড সাব কোয়েরি) learning আপনার কলামগুলিকে "আইডি" নামকরণ করার বিষয়টি খারাপ অভ্যাস হওয়ার চেয়ে স্বাদের বিষয়টির কাছাকাছি।
সম্পাদকগণের জন্য একটি দ্রষ্টব্য: এই ক্যোয়ারিতে ত্রুটিটি ইচ্ছাকৃত এবং একটি বিন্দু তৈরি করার জন্য ব্যবহৃত হচ্ছে। সম্পাদনার পূর্বে দয়া করে পুরো উত্তরটি পড়ুন।
cars
-> Godশ্বরকে car
ধন্যবাদ - আপনি আমার আঙ্গুলগুলি সংরক্ষণ করেছিলেন)। এর মধ্যে খুব গভীরভাবে পড়বেন না।
cars
এবং manufacturer
। একটি বহুবচন, অন্যটি নয়। লোকেরা যদি ডিবিতে বাছাই করতে চায় তবে এটিই খারাপ অভ্যাস যা বেছে নেওয়া উচিত।
কারণ যখন আপনার কাছে একটি বিদেশী কী সহ কোনও টেবিল থাকে আপনি সেই বিদেশী কী "আইডির" নাম রাখতে পারবেন না। আপনার টেবিলের নাম এটি টেবিলআইডি রয়েছে
এবং তারপরে আপনার যোগদানের মতো দেখাচ্ছে
SELECT * FROM cars c JOIN manufacturer m ON m.Id = c.ManufacturerId
এবং আদর্শভাবে, আপনার অবস্থার প্রতিটি পক্ষের একই ক্ষেত্রের নাম হওয়া উচিত
SELECT * FROM cars c JOIN manufacturer m ON m.ManufacturerId = c.ManufacturerId
সুতরাং আইডিটির নাম উত্পাদনকারক হিসাবে রাখা অপ্রয়োজনীয় মনে হলেও ভুলগুলি সুস্পষ্ট হয়ে যাওয়ার কারণে আপনার যোগদানের শর্তে আপনার ত্রুটি রয়েছে less
এটি সহজ বলে মনে হচ্ছে, তবে আপনি যখন বেশ কয়েকটি টেবিলগুলিতে যোগদান করেন, তখন সম্ভবত আপনি ভুল করবেন, নীচের একটিটি সন্ধান করুন ...
SELECT *
FROM cars car
JOIN manufacturer mfg
ON mfg.Id = car.ManufacturerId
JOIN models mod
ON mod.Id = car.ModelId
JOIN colors col
ON mfg.Id = car.ColorId
যথাযথ নামকরণের সাথে সাথে ত্রুটিটি আটকে যায় ...
SELECT *
FROM cars car
JOIN manufacturer mfg
ON mfg.ManufacturerId = car.ManufacturerId
JOIN models mod
ON mod.ModelId = car.ModelId
JOIN colors col
ON mfg.ManufacturerId = car.ColorId
তাদের "আইডি" নামকরণের আরেকটি কারণ হ'ল আপনি যখন বেশ কয়েকটি টেবিল থেকে তথ্যের জন্য জিজ্ঞাসা করছেন তখন আপনাকে আইডি কলামগুলির নাম পরিবর্তন করতে হবে যাতে আপনি তাদের আলাদা করতে পারেন।
SELECT manufacturer.Id as 'ManufacturerId'
,cars.Id as 'CarId'
--etc
FROM cars
JOIN manufacturer
ON manufacturer.Id = cars.Id
সঠিক নাম সহ এটি কোনও সমস্যা কম
SELECT * FROM cars c JOIN manufacturer m ON manufacturer.Id = c.ManufacturerId
। আমি id
বছরের পর বছর ধরে ব্যবহার করেছি এবং আপনি যা সত্যই সমস্যা হিসাবে বর্ণনা করেছেন তা কখনও পাইনি।
SELECT manufacturer.id FROM ...
। ফলে প্রাপ্ত প্রতিটি অসুবিধা id
খুব সহজেই কাটিয়ে উঠতে পারে, এটি কেবল স্বাদের বিষয় হিসাবে।
রুবির অ্যাক্টিভেকর্ড লাইব্রেরি এবং গ্রোভির জিওআরএম পূর্বনির্ধারিতভাবে সার্গেট কীটির জন্য "আইডি" ব্যবহার করে। আমি এই অনুশীলন পছন্দ। প্রতিটি কলামের নাম অনুসারে টেবিলের নামটি অনুলিপি করা অতিরিক্ত কাজ, লেখার জন্য ক্লান্তিকর এবং পড়ার জন্য আরও ক্লান্তিকর।
"নাম" বা "আইডি" এর মতো সাধারণ বা মূল কলামের নামগুলি টেবিলনামের সাথে উপসর্গ করা উচিত।
এটি অস্পষ্টতা সরিয়ে দেয়, সহজে অনুসন্ধান করতে পারে, এর অর্থ যখন "আইডি" উভয় মান প্রয়োজন হয় তখন অনেক কম কলামের উপাধি হয়।
কম ব্যবহৃত বা নিরীক্ষণ কলাম বা নন-কী (লাস্টআপডেটডেটটাইম বলুন) তাতে কিছু আসে যায় না
name
এবং id
? কেন প্রতিটি কলামটি তার টেবিলের নামের সাথে উপসর্গ করা হয়নি? একটি উপসর্গ আদেশ করার জন্য এই দুটি নাম বাছাই করা স্বেচ্ছাচারী বলে মনে হচ্ছে। ধারণামূলকভাবে, যাইহোক কোনও কলামের প্রসঙ্গ থাকতে আপনার অবশ্যই টেবিলটি থাকা উচিত। কেন কেবল এই টেবিলের নামটি ক্যোয়ারীটি পরিষ্কার করতে ব্যবহার করবেন না: পার্সন.নাম, এনিমেল.নাম, পার্ট.নাম, ...
এই থ্রেডটি মারা গেছে তবে আমি যুক্ত করতে চাই যে আইএমও ব্যবহার করছে নাId
এটি একটি খারাপ অভ্যাস। Id
কলাম বিশেষ হয়; এটা প্রাথমিক কী। যে কোনও টেবিলে অনেকগুলি বিদেশী কী থাকতে পারে তবে এটিতে কেবলমাত্র একটি কীটি প্রাথমিক থাকতে পারে। একটি ডাটাবেসে যেখানে সমস্ত প্রাথমিক কীগুলি বলা হয় , আপনি টেবিলটির দিকে নজর দেওয়ার সাথে সাথেই আপনি জানতে পারবেন কোন কলামটি প্রাথমিক কী।Id
বিশ্বাস করুন, কয়েক মাস ধরে আমি প্রতিদিন প্রচুর বড় ডেটাবেজে (সেলসফোর্স) কাজ করে সারা দিন কাটিয়েছি এবং স্কিমাস সম্পর্কে সবচেয়ে ভাল বলতে পারি যে প্রতিটি টেবিলে একটি প্রাথমিক কী বলা হয় Id
। আমি আপনাকে আশ্বাস দিতে পারি যে আমি কোনও বিদেশী কীতে প্রাথমিক কীতে যোগদানের বিষয়ে একেবারেই বিভ্রান্ত হই না কারণ পিকে বলা হয় Id
। অন্য একটি জিনিস যা লোকেরা উল্লেখ করেনি তা হ'ল টেবিলে দীর্ঘ নির্বোধের মতো নাম থাকতে পারে Table_ThatDoesGood_stuff__c
; নামটি যথেষ্ট খারাপ কারণ এই টেবিলটি ভেবে সকালে স্থপতিটির একটি হ্যাংওভার ছিল, তবে এখন আপনি আমাকে বলছেন যে প্রাথমিক কীটি কল করা খারাপ অভ্যাস নয় Table_ThatDoesGood_stuff__cId
(মনে রাখবেন যে এসকিউএল কলামের নামগুলি সাধারণ ক্ষেত্রে সংবেদনশীল নয়)।
সত্যি কথা বলতে কি, কম্পিউটার প্রোগ্রামিং শেখানো বেশিরভাগ লোকদের সমস্যাগুলি হ'ল তারা বছরের পর বছর যদি প্রডাকশন কোডের একটি লাইন লেখেন না, তবে কোনও কার্যনির্বাহী সফটওয়্যার ইঞ্জিনিয়ার আসলে কী করেন তাদের কোনও ধারণা নেই। আপনি কাজ শুরু না করা পর্যন্ত অপেক্ষা করুন এবং তারপরে আপনার নিজের মতামতটি আপ করুন যে আপনি কী ভাবছেন বা না।
আমি এটাকে খারাপ অভ্যাস বলে বিবেচনা করি না। ধারাবাহিকতা যথারীতি রাজা।
আমি মনে করি এটি সমস্ত প্রসঙ্গে। নিজস্ব টেবিলে প্রসঙ্গে "আইডি" এর অর্থ হ'ল আপনি যা প্রত্যাশা করেন ঠিক তার অর্থ অন্যদের বিরুদ্ধে এটি অনন্যভাবে সনাক্ত করতে সহায়তা করার জন্য একটি লেবেল যা অন্যথায় অভিন্ন (বা উপস্থিত হতে পারে) হতে পারে।
যোগদানের প্রসঙ্গে, আপনার এবং আপনার দলের পক্ষে এটি পাঠযোগ্য হয়ে ওঠার জন্য এমনভাবে যুক্ত হওয়াগুলি তৈরি করা আপনার দায়িত্ব। দুর্বল বাক্যাংশ বা নামকরণের মাধ্যমে বিষয়গুলিকে যেমন অসুবিধাজনক করে তোলা সম্ভব, ঠিক তেমনি উপাধি এমনকি মন্তব্যগুলির কার্যকর ব্যবহার সহ একটি অর্থবহ জিজ্ঞাসা তৈরি করাও সমানভাবে সম্ভব।
'ফু' নামে পরিচিত একটি জাভা শ্রেণীর একই উপায়ে 'ফু'-এর উপসর্গ নেই, টেবিলের নাম সহ আপনার টেবিলের আইডি উপসর্গ করতে বাধ্য বোধ করবেন না। আইডিটি কী উল্লেখ করা হচ্ছে তা প্রসঙ্গে সাধারণত স্পষ্ট হয়।
ডেটা.স্ট্যাকেক্সেঞ্জ ডটকম থেকে
বুম, প্রশ্নের উত্তর।
এখন আপনার শিক্ষককে যান যে খারাপ ডাটাবেস ডিজাইনের অনুশীলন করুন
PostTypeId -> PostTypes.Id
; AcceptedAnswerId -> Answers.Id
; OwnerUserId -> Users.Id
। এমন একটি অনুশীলনকে কেন 'খারাপ' বলে বিবেচনা করা উচিত?
এটি টেবিলে প্রাকৃতিক যোগদান করতে শক্ত (এবং বিভ্রান্তিকর) করে তোলে, তাই হ্যাঁ, খুব খারাপ না হলে এটি খারাপ।
প্রাকৃতিক যোগদান হ'ল এসকিউএল লোরের একটি প্রাচীন নিদর্শন (অর্থাত্ রিলেশনাল বীজগণিত) আপনি এর মধ্যে একটি দেখতে পেয়েছেন: a সম্ভবত একটি ডাটাবেস বইতে book আমার অর্থ হ'ল ন্যাচারাল জয়েন কোনও নতুন ফিঙ্গেল এসকিউএল ধারণা নয়, যদিও এটি মনে হয়েছিল যে এটি চূড়ান্তভাবে গ্রহণ করবে DBMS এর বাস্তবায়নের জন্য, সুতরাং এটি বাস্তবায়নের জন্য এটি আপনার পক্ষে কোনও নতুন ঝাপসা ধারণা নয়, এমনকি আপনার অবহেলা করাও অযৌক্তিক হতে পারে আজকাল এর অস্তিত্ব।
ঠিক আছে, আপনি যদি আপনার সমস্ত প্রাথমিক কী এর আইডি নামকরণ করেন তবে আপনি প্রাকৃতিক যোগদানের স্বাচ্ছন্দ্য এবং সরলতা হারাবেন। select * from dudes natural join cars
লিখতে হবে select * from dudes inner join cars where cars.dudeid = dudes.id
বা select * from dudes inner join cars where dudes.carid = cars.id
। আপনি যদি প্রাকৃতিক যোগদান করতে সক্ষম হন তবে সম্পর্কটি আসলে কী তা আপনি এড়িয়ে যাবেন, যা আমি বিশ্বাস করি যে এটি দুর্দান্ত।
এমন একটি পরিস্থিতি রয়েছে যেখানে প্রতিটি টেবিলে "আইডি" লাগানো সেরা ধারণা নয়: USING
মূলশব্দটি যদি এটি সমর্থন করে। আমরা এটি প্রায়শই মাইএসকিউএলে ব্যবহার করি।
উদাহরণস্বরূপ, যদি আপনার কাছে fooTable
কলাম fooTableId
এবং barTable
বিদেশী কী রয়েছে fooTableId
, তবে আপনার প্রশ্নগুলি যেমন তৈরি করা যেতে পারে:
SELECT fooTableId, fooField1, barField2 FROM fooTable INNER JOIN barTable USING (fooTableId)
এটি কেবল টাইপিং সংরক্ষণ করে না, তবে বিকল্পের তুলনায় অনেক বেশি পঠনযোগ্য:
SELECT fooTable.Id, fooField1, barField2 FROM fooTable INNER JOIN barTable ON (fooTable.Id = barTable.foTableId)
USING
শব্দ postgres / MySQL / SQLite ডাটাবেস দ্বারা সমর্থিত হয়, কম টাইপিং যা ব্যবহার করার জন্য একটি কারণ হিসাবে অন্যান্য উত্তর তালিকার কিছু মানে id
, এবং পরিশেষে আমার বিষয়ী মতামত আরও পাঠযোগ্য।
কেন শুধু আপনার শিক্ষককে জিজ্ঞাসা করবেন না?
এটি সম্পর্কে চিন্তা করুন, যখন আপনার সমস্ত টেবিলের পিকে কলামগুলির নাম দেওয়া হয় ID
এটি বিদেশী কী হিসাবে তাদের দুঃস্বপ্নের সাহায্যে ব্যবহার করে।
কলামের নামগুলি শব্দার্থগতভাবে তাৎপর্যপূর্ণ হওয়া দরকার। ID
জেনেরিক হয়।
id
একাকী কিছু বোঝায় না, বিশেষত অন্য টেবিলে বিদেশী কী প্রসঙ্গে। এর সাথে কিছু করার নেই classes
এবং ভাল বুনিয়াদি মৌলিক সম্পর্কযুক্ত ডাটাবেস ডিজাইনের সাথে করার মতো সমস্ত কিছুই ।
table.id
উল্লেখ করার id
ক্ষেত্রে এটি একটি গ্রহণযোগ্য উপায় । সারণীর নামের সাথে ক্ষেত্রের নামটি উপস্থাপন করা অপ্রয়োজনীয়।
নিম্নলিখিত কারণে আইডি খারাপ:
আপনি যদি অনেকগুলি রিপোর্টিং কোয়েরি করেন তবে সর্বদা আপনি উভয়ই দেখতে চাইলে কলামগুলি উলামা করতে হবে। সুতরাং এটি সময় নষ্ট হয়ে যায় যখন আপনি এটির সঠিক নাম দিয়ে শুরু করতে পারেন। এই জটিল প্রশ্নগুলি অপ্রয়োজনীয় কাজ না করার অতিরিক্ত বোঝা ছাড়াই যথেষ্ট কঠিন (আমি এমন প্রশ্নগুলি লিখি যা কয়েকশ লাইন দীর্ঘ হতে পারে) লিখি।
এটি কোড ত্রুটির কারণ হতে পারে। যদি আপনি এমন একটি ডাটাবেস ব্যবহার করেন যা প্রাকৃতিক যোগদানের মঞ্জুরি দেয় (আমি মনে করি না যে আপনার কখনই এটি ব্যবহার করা উচিত তবে যখন বৈশিষ্ট্যগুলি উপলব্ধ থাকে তবে কেউ তাদের ব্যবহার করবে), আপনি যদি কোনও বিকাশকারী এটি ব্যবহার করেন তবে আপনি ভুল জিনিসটিতে যোগ দেবেন।
যদি আপনি একটি জটিল ক্যোয়ারী তৈরি করতে যোগদান করে অনুলিপি করছেন তবে আপনার যে উচ্ছ্বাসটি চান তার পরিবর্তে ভুল নামটি ভুলে যাওয়া আপনার পক্ষে ভুলানো সহজ। যদি প্রতিটি আইডির নামটি টেবিলের মধ্যে থাকে তবে এটির পরে সাধারণত আপনি একটি বাক্য গঠন ত্রুটি পাবেন। পিপিকে নাম এবং এফকে নাম মেলে যদি যোগ ইনা জটিল ক্যোয়ারী ভুল হয় তবে স্পট করা সহজ।
ID
আমাকে মোটেও বোঝায় না।
কিছু উত্তর রয়েছে যেটিতে আমি কোনও সারণীতে প্রাথমিক কীটির কলামের নাম হিসাবে "আইডি" ব্যবহার না করার সবচেয়ে গুরুত্বপূর্ণ কারণটি বিবেচনা করব approach নামটির ধারাবাহিকতা এবং অস্পষ্টতা হ্রাস।
তবে, আমার জন্য মূল সুবিধাটি রক্ষণাবেক্ষণ প্রোগ্রামার দ্বারা উপলব্ধি করা হয়েছে, বিশেষত এমন একজন যিনি মূল বিকাশের সাথে জড়িত ছিলেন না। আপনি যদি ব্যক্তির সারণীতে আইডির জন্য "পার্সোনআইডি" নামটি ব্যবহার করেন এবং ধারাবাহিকভাবে সেই নামটি বিদেশী কী হিসাবে ব্যবহার করেন, তবে "পার্সোনআইডি" নির্ধারণ না করে টেবিলগুলিতে ব্যক্তিত্বের কী আছে তা সন্ধানের জন্য স্কিমার বিরুদ্ধে একটি কোয়েরি লিখতে তুচ্ছ is বিদেশী কী হলে ব্যবহৃত নামটি। মনে রাখবেন, সঠিক বা ভুল, বিদেশী মূল সম্পর্কগুলি সবসময়ই সমস্ত প্রকল্পে প্রয়োগ করা হয় না।
একটি প্রান্তের কেস রয়েছে যেখানে একটি টেবিলের একই টেবিলের জন্য দুটি বিদেশী কী থাকা দরকার, তবে এই জাতীয় ক্ষেত্রে আমি মূল কীটির নামটি কলামটির প্রত্যয় নাম হিসাবে রেখে দেব, সুতরাং একটি ওয়াইল্ডকার্ড মিল,% পার্সোনআইডি সহজেই খুঁজে পেল could সেই উদাহরণগুলিও।
হ্যাঁ, এর অনেক কিছুই "আইডি" থাকা এবং এটি সর্বদা "টেবিলনামআইডি" হিসাবে ব্যবহার করা জেনার স্ট্যান্ডার্ড দ্বারা অর্জন করা যেতে পারে, তবে এর অনুশীলনটি ঠিক আছে এবং মূল বিকাশকারীদের উপর নির্ভর করে কিছুটা কম করে অনুসরণ করতে হবে উভয়েরই প্রয়োজন requires স্বজ্ঞাত মান অনুশীলন।
যদিও কিছু লোক উল্লেখ করেছেন যে দীর্ঘ কলামের নামগুলি লেখার জন্য এটি কিছু অতিরিক্ত কী স্ট্রোকের প্রয়োজন নেই, তবে আমি মনে করব যে কোডটি লেখার জন্য প্রোগ্রামটির সক্রিয় জীবনের একটি ছোট্ট অংশ মাত্র। যদি বিকাশকারী কীস্ট্রোকগুলি সংরক্ষণ করা লক্ষ্য ছিল, মন্তব্যগুলি কখনই লেখা উচিত নয়।
কয়েকশো টেবিল সহ বড় প্রকল্পগুলি বজায় রাখতে বেশ কয়েক বছর ব্যয় করেছেন এমন কেউ হিসাবে, আমি সারণীগুলির জুড়ে একটি কীটির জন্য দৃ consistent়সংখ্যক নাম পছন্দ করব।
Companies
টেবিলের একটি টেবিলের কাছে দুটি বিদেশী কী Persons
রয়েছে। একজন কোম্পানির রাষ্ট্রপতির প্রতিনিধিত্ব করেন; অন্যটি কোম্পানির ট্রেজারার উপস্থাপন করে। আপনি কি সত্যিই কলামগুলিতে কল করবেন PersonID1
এবং PersonID2
? তাদের কল করা PresidentID
এবং আরও অনেক বেশি বর্ণনামূলক হবে TreasurerID
। আমি পড়তে খুব সহজ inner join Person AS Presidents ON Company.PresidentID = Presidents.ID
মনে করিinner join Person AS Person1 ON Company.PersonID1 = Person1.PersonID
CompanyOfficer
বা CompanyPerson
টেবিল থাকবে যা সম্পর্কের প্রকৃতি সম্পর্কে অতিরিক্ত তথ্যের সাথে Company
এবং এর Person
সাথে অনেকগুলি থেকে বহু সম্পর্কের মঞ্জুরি দেয় । যদি আমি মধ্যে তা বাস্তবায়ন ছিল Company
টেবিল, আমি কলাম নামে ব্যবহার করেন PresidentPersonID
এবং TreasurerPersonID
যখন অতিরিক্ত বর্ণনাকারী যোগ * PersonID নামের অংশ সংরক্ষণ করা। inner join Person as Presidents on Company.PresidentPersonID = Presidents.PersonID
আইডিটিকে প্রাথমিক কী ক্ষেত্র হিসাবে ব্যবহার করার অনুশীলনটি অনুশীলনের দিকে নিয়ে যায় যেখানে প্রতিটি টেবিলে আইডি যুক্ত হয়। অনেকগুলি টেবিলের ইতিমধ্যে অনন্য তথ্য রয়েছে যা অনন্যভাবে একটি রেকর্ড সনাক্ত করে। আপনি প্রতিটি টেবিলে যোগ করেন এমন একটি আইডি ক্ষেত্র নয়, এটি প্রাথমিক কী হিসাবে ব্যবহার করুন। এটি রিলেশনাল ডাটাবেসের অন্যতম ভিত্তি।
এবং এজন্য আইডি ব্যবহার করা খারাপ অভ্যাস: আইডি হ'ল তথ্য কেবল একটি স্বতঃসংশোধন নয়।
নিম্নলিখিত সারণি বিবেচনা করুন:
PK id | Countryid | Countryname
1 | 840 | United States
2 | 528 | the Netherlands
এই টেবিলটিতে যা ভুল তা হ'ল এটি ব্যবহারকারীকে অন্য একটি লাইন যুক্ত করতে সক্ষম করে: মার্কিন যুক্তরাষ্ট্র, দেশকোড 840 দিয়ে। অবশ্যই আপনি স্বতন্ত্র কলামগুলিতে স্বতন্ত্রতা প্রয়োগ করতে পারেন বা আপনি ইতিমধ্যে উপলব্ধ একটি প্রাথমিক কী ব্যবহার করতে পারেন:
PK Countryid | Countryname
840 | United States
528 | the Netherlands
এইভাবে আপনি আপনার কাছে ইতিমধ্যে থাকা প্রাথমিক কী হিসাবে তথ্যটি ব্যবহার করেন যা সম্পর্কিত ডেটাবেস ডিজাইনের কেন্দ্রস্থলে।
আমি মনে করি না এটি যদি সঠিকভাবে ব্যবহার করা হয় তবে এটি একটি খারাপ অভ্যাস। "আইডি" নামে একটি স্বতঃবৃদ্ধি আইডি ক্ষেত্র থাকা আপনার সাধারণ যা আপনার কখনও স্পর্শ করতে পারে না এবং অ্যাপ্লিকেশনটির জন্য বন্ধুবান্ধব শনাক্তকারী ব্যবহার করতে পারে। কোডটি লেখার জন্য এটি কিছুটা জটিল হতে পারে from tableA a inner join tableB b on a.id = b.a_id
তবে সেই কোডটি কেটে ফেলা যায়।
ব্যক্তিগত পছন্দ হিসাবে আমি সত্তার নাম সহ আইডি উপসর্গ করতে ঝোঁক, কিন্তু এটি ব্যবহার করে একটি বাস্তব সমস্যা দেখতে পাচ্ছি না Id
যদি এটি সম্পূর্ণভাবে ডাটাবেস দ্বারা পরিচালিত হয়।
আইডি যথেষ্ট সাধারণ, আমি মনে করি না যে এটি কাউকে বিভ্রান্ত করবে। আপনি সর্বদা টেবিলটি জানতে চাইবেন। সারণী / উপনামটি না দিয়ে উত্পাদন কোডে ক্ষেত্রের নাম রাখা একটি খারাপ অভ্যাস। আপনি যদি দ্রুত এইডক কোয়েরি টাইপ করতে সক্ষম হবেন সম্পর্কে অতিরিক্ত উদ্বিগ্ন হন তবে আপনি নিজেরাই।
শুধু আশা করি কেউ আইডি একটি সংরক্ষিত শব্দ যেখানে স্কয়ার ডাটাবেস বিকাশ করে না।
CREATE TABLE CAR (ID);
ক্ষেত্রের নাম, প্রাথমিক কী এবং অটো বর্ধনের জন্য 1 দ্বারা 1 দিয়ে শুরু করে একটি দুর্দান্ত ছোট 2 অক্ষরের প্যাকেজটি যত্ন করে। ওহ, এবং আমি এটিকে CARS নামে ডাকতাম তবে আমরা কী-স্ট্রোকগুলিতে সঞ্চয় করতে যাচ্ছি এবং কে সত্যিই মনে করে যে CAR নামক একটি টেবিলটি কেবল একটি পাবে?
Car
এক স্থানে প্রতিনিধিত্ব করে Table
যেখানে প্রতিটি Row
একককে উপস্থাপন করে Car
। Cars
পরিবর্তনের আহ্বান সিমেটিক এবং আনুষ্ঠানিক সম্পর্কগত তত্ত্ব বেসিক প্রিন্সিপালগুলির সম্পূর্ণ বোঝার অভাব দেখায়। ব্যর্থতা এমন কারও একটি প্রধান উদাহরণ যা বিপজ্জনক বলে যথেষ্ট জানত ।
এই প্রশ্নটি বার বার মারধর করা হয়েছে তবে আমি ভেবেছিলাম যে আমিও আমার মতামত যুক্ত করব।
আমি আইডিটি বোঝাতে এই ব্যবহার করি যে এটি প্রতিটি টেবিলের জন্য সনাক্তকারী, সুতরাং যখন আমি কোনও টেবিলে যোগদান করি এবং আমার যখন প্রাথমিক কী প্রয়োজন তখন আমি স্বয়ংক্রিয়ভাবে প্রাথমিক কীতে যোগদান করি।
আইডি ক্ষেত্রটি একটি স্ব-স্বীকৃতি, স্বাক্ষরবিহীন (মানে এর অর্থ আমাকে কখনই নির্ধারণ করতে হবে না এবং এটি নেতিবাচক হতে পারে না)
বিদেশী কীগুলির জন্য, আমি টেবিলনামিড ব্যবহার করি (আবার শৈলীর বিষয়) তবে আমি যে প্রাথমিক কীটিতে যোগদান করি তা হ'ল টেবিলের আইডি ক্ষেত্র, সুতরাং ধারাবাহিকতার অর্থ আমি সর্বদা সহজেই অনুসন্ধানগুলি পরীক্ষা করতে পারি
আইডি সংক্ষিপ্ত এবং খুব মিষ্টি
অতিরিক্ত কনভেনশন - সমস্ত টেবিল এবং কলামের নামগুলির জন্য লোয়ার কেস ব্যবহার করুন, সুতরাং কেসের কারণে কোনও সমস্যা খুঁজে পাওয়া যায় না
আরেকটি বিষয় বিবেচনা করার বিষয় হ'ল যদি প্রাথমিক কী নামটি বিদেশী কী নামের থেকে আলাদা হয় তবে নির্দিষ্ট তৃতীয় পক্ষের সরঞ্জাম ব্যবহার করা সম্ভব নয়।
উদাহরণস্বরূপ, আপনি ভিসিওর মতো কোনও সরঞ্জামে আপনার স্কিমা লোড করতে অক্ষম হবেন এবং এটি সঠিক ERD তৈরি করতে পারবেন।
আমি এখানে লোকেরা প্রতিটি দিককে বেশ কভার করে দেখতে পেয়েছি তবে আমি যুক্ত করতে চাই যে "আইডি" এটি "সনাক্তকারী" হিসাবে পড়া উচিত নয় এবং এটি "সূচী" এর চেয়ে বেশি এবং অবশ্যই এটি সারিটির পরিচয় বর্ণিত বা বর্ণনা করে না। (আমি এখানে ভুল শব্দ ব্যবহার করতে পারি, দয়া করে আমাকে সংশোধন করুন)
এটি কমবেশি কীভাবে লোকেরা সারণির ডেটা পড়বে এবং কীভাবে তারা তাদের কোড লিখবে। আমি ব্যক্তিগতভাবে এবং সম্ভবত এটি সর্বাধিক ঘন ঘন আমি দেখি যে কোডাররা সম্পূর্ণ রেফারেন্সটি লিখেন table.id
, এমনকি তাদের ইউনিয়নের বা / এবং যোগদানের প্রয়োজন হয় না। উদাহরণ স্বরূপ:
SELECT cars.color, cars.model FROM cars WHERE cars.id = <some_var>
এইভাবে আপনি এটি ইংরেজিতে অনুবাদ করতে পারেন "আমাকে সেই গাড়িটির রঙ এবং মডেল দিন যা নম্বরযুক্ত।" এবং "আমাকে সেই নম্বরটির রঙ এবং মডেল দিন যা নম্বর হিসাবে চিহ্নিত হয়।" আইডিটি কোনওভাবেই গাড়িটিকে উপস্থাপন করে না, এটি কেবল গাড়ির সূচক, আপনি যদি চান তবে একটি সিরিয়াল নম্বর। ঠিক যখন আপনি কোনও অ্যারে থেকে তৃতীয় উপাদানটি নিতে চান।
সুতরাং আমি যুক্ত করতে চেয়েছি তা সংক্ষেপে এই যে এটি কেবলমাত্র পছন্দের বিষয় এবং এসকিউএল পড়ার বর্ণিত পদ্ধতিটি সর্বাধিক জনপ্রিয়।
যদিও, এমন কিছু ক্ষেত্রে রয়েছে যেখানে এটি ব্যবহার করা হয় না, যেমন (অনেক বেশি বিরল উদাহরণ) যখন আইডিটি এমন স্ট্রিং থাকে যা সত্যিই বর্ণনা করে। উদাহরণস্বরূপ id = "RedFordMustang1970"
বা অনুরূপ কিছু। আমি সত্যিই আশা করি আমি কমপক্ষে ধারণা পেতে এটি ব্যাখ্যা করতে পারতাম।