তারিখ দ্বারা রেকর্ডগুলি চিহ্নিত করা যায় তবে আমার কি আমার ডাটাবেসে আইডি দরকার?


17

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

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

আমার টেবিলটির এখনও একটি আইডি কলাম দরকার? যদি তা হয় তবে তারিখের বিপরীতে রেকর্ড সনাক্তকারী হিসাবে আইডি ব্যবহারের সুবিধা কী?


আপনি যদি পূর্ণসংখ্যার পিকে নির্দিষ্ট না করেন তবে এসকিউএলাইট সর্বদা রোউইডের জন্য একটি পূর্ণসংখ্যা কলাম তৈরি করবে। সুতরাং স্থান বাঁচানোর উপায় হিসাবে একটি "আইডি" কলাম না থাকার বিষয়ে বিশ্বাস করবেন না।
কোডিজম

আমি যুক্ত করব যে অ্যান্ড্রয়েডে কিছু শ্রেণীর কাজ করার জন্য একটি _আইডি কলাম থাকতে টেবিলের প্রয়োজন। এই এসও উত্তর আরও তথ্য ।
বড়স্টোনস

5
আপনি যদি ফোন থেকে নিজেই তারিখটি পেয়ে থাকেন এবং ব্যবহারকারী পূর্বের টাইম জোনে ভ্রমণ করে (এবং তার ফোনটি স্বয়ংক্রিয়ভাবে সময় আপডেট করে) তবে সামান্য সম্ভাবনা রয়েছে যে আপনি একই সময়ের স্ট্যাম্পটি একাধিকবার পেতে পারেন।
ইউজিন

উত্তর:


22

আইএমএইচও, একটি প্রাথমিক কী হিসাবে একটি তারিখ কলামটি ব্যবহার করা এড়ানো সেরা is

আমি এমন সিস্টেমে কাজ করেছি যেখানে একটি তারিখের ক্ষেত্রটিকে প্রাথমিক কী হিসাবে ব্যবহার করা হয় এবং ডেটার সাবসেটগুলি পিছনে টানতে কোয়েরি লিখতে যদি আপনি তারিখের ক্ষেত্রগুলির সাথে কাজ করছেন তবে কিছুটা টানতে হবে।

আপনি বিবেচনা করতে পারেন অন্য কিছু পয়েন্ট:

আপনি ভাবতে পারেন যে সময়ের মধ্যে একটি বিন্দু অনন্য, তবে এটি বরং তারিখের কলামের গ্রানুলারিটির উপর নির্ভর করে। এটা মিনিট, সেকেন্ড, মিলিসেকেন্ডে ইত্যাদি আপনি হতে পারে একেবারে নিশ্চিত করুন যে আপনি একটি প্রাথমিক কী লঙ্ঘন না পাব?

অবশেষে, আপনি যদি অন্য প্ল্যাটফর্মে ডাটাবেস স্থানান্তর করতে চান তবে আপনার আবার সমস্যা দেখা দিতে পারে যেখানে প্ল্যাটফর্মগুলির মধ্যে তারিখের ডেটারিয়ালারিটি আলাদা হয়।

আপনাকে অবশ্যই যা কাজ করতে হবে তার সাথে আদর্শের ভারসাম্য বজায় রাখতে হবে। স্থানটি যদি সত্যিই এতটা উদ্বেগের বিষয় থাকে তবে তারিখের কলামটি ব্যবহার করা দু'টি দুষ্কর্মের চেয়ে কম হতে পারে। এটি আপনাকে ডিজাইনের সিদ্ধান্ত নিতে হবে।

সম্পাদনা:

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


আমি যখন একটি এসকিউএল ক্যোয়ারী লিখেছি তখন কিছুক্ষণ হয়ে গেছে, তবে বাঁধার মানগুলির আরও ভার্জোজিক ঘোষণাকে বাদ দিয়ে, পূর্ণসংখ্যা অনুসারে ফিল্টারিংয়ের মতো তারিখগুলি দ্বারা ফিল্টারিং করা হচ্ছে না?
ডগএম

এটি কেবল আরও ভার্বোজ এবং কিছু আরডিবিএমএসেও আপনি এই সমস্যাটি পান যেখানে ডিবি মার্কিন ফর্ম্যাটে সেট আপ করা থাকলে দিন এবং মাসের উপাদানটি বিপরীত হয়।
রবি ডি

ধন্যবাদ, এগুলি সব ভাল উত্তর, কিন্তু কাজের সময় আপনার অভিজ্ঞতা অবশ্যই চুক্তিটি সিল করেছে।
নিজস্কা

এটিতে একটি পোস্টস্ক্রিপ্ট হিসাবে: কেবলমাত্র আজই আমাকে একটি অ্যাপ্লিকেশন অডিট টেবিলের জন্য একটি সমর্থন ইস্যু হস্তান্তর করা হয়েছে যেখানে তারা 2 ক্লায়েন্ট ডিভাইসের মধ্যে সময়ের পার্থক্যের কারণে কোনও কর্মচারীর নম্বর এবং অ্যাক্সেসের তারিখ / সময় পিকে জন্য প্রাথমিক কী লঙ্ঘন পাচ্ছেন। ..
রবি ডি

13

না, আপনার স্কিমায় সংজ্ঞায়িত কোনও আইডি কলামের দরকার নেই যদি আপনি গ্যারান্টি দিতে পারেন যে কোনও সদৃশ তারিখ কখনই থাকবে না।

কিন্তু ...

... এটি বলেছিল, আপনি সম্ভবত এটি যেভাবেই ব্যবহার করতে পারেন। এখানে ছোট রহস্যটি হ'ল এসকিউএলাইটের ইতিমধ্যে ROWID নামক প্রতিটি টেবিলের জন্য একটি অনন্য, স্ব-বর্ধনশীল আইডি রয়েছে। আপনি যদি আপনার টেবিলটিতে একটি পিকে হিসাবে একটি স্ব-বর্ধক পূর্ণসংখ্যার কলামটি ঘোষণা করেন, এসকিউএলাইট একটি নতুন কলাম তৈরি করবে না - এটি কেবলমাত্র পূর্ব-বিদ্যমান রাউইভিড কলামটিই নামকরণ করবে।

এসকিউএলাইটে, প্রতিটি টেবিলের প্রতিটি সারিতে একটি 64-বিট স্বাক্ষরিত পূর্ণসংখ্যার ROWID থাকে। প্রতিটি সারির জন্য ROWID একই টেবিলের সমস্ত সারিগুলির মধ্যে স্বতন্ত্র।

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

যদি কোনও টেবিলটিতে INTEGER PREARY KEY প্রকারের একটি কলাম থাকে, তবে সেই কলামটি ROWID এর একটি উপাধিতে পরিণত হয়। তারপরে আপনি চারটি পৃথক নামের যেকোন একটির উপরে, বর্ণিত মূল তিনটি নাম বা স্বতন্ত্র প্রাথমিক কী কলামে দেওয়া নামটি ব্যবহার করে রাউইভিড অ্যাক্সেস করতে পারবেন। এই সমস্ত নাম একে অপরের অপর নাম এবং কোনও প্রসঙ্গে সমানভাবে ভাল কাজ করে।

http://www.sqlite.org/autoinc.html

সুতরাং, আপনি কোনও আইডি কলাম ব্যবহার না করে কোনও স্থান সঞ্চয় করবেন না যেহেতু আপনি চান কিনা তা আপনি প্রতিটি টেবিলে এক পাচ্ছেন!


9

নিম্নলিখিত আইডিটি যদি সত্য হয় তবে একটি আইডি ক্ষেত্র ব্যবহার করুন:

  1. কোনও প্রাকৃতিক কী বিদ্যমান নেই (তারিখটি অনন্য হবে না)
  2. তারিখের ক্ষেত্রটি প্রায়শই পরিবর্তিত হবে
  3. সন্নিবেশের মুহুর্তে তারিখটি জানা যাবে না।
  4. একটি বহুবিধ কলাম শনাক্তকারী তিনটি কলাম অতিক্রম করে, যা খুব ভার্জোজকে যোগ দেয়।

এই প্রশ্নটি পড়ুন: "অল-সারোগেটস" কে সমর্থনকারী কোনও আধ্যাত্মিক উত্স আছে?

সম্পাদনা:

যেহেতু, আমার মতে এটি উপরেরগুলির কোনওটিই সত্য বলে মনে হচ্ছে না, আপনার ব্যবহার এবং আইডি ক্ষেত্রের দরকার নেই তবে আপনি চাইলে একটি ব্যবহার করতে পারেন।


1
+1 আইডি কলামগুলি একটি স্কিমা কোড গন্ধ, যা আপনার ডেটা সত্যিই আপেক্ষিক মডেল ফিট করে না তা বোঝায়।
রস প্যাটারসন

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

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

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

1
আপনি কি ঠিক বলেছেন? এটা বিষয় বন্ধ।
তুলাইনস কর্ডোভা

2

মনে রাখবেন যে আপনার কাছে থেকে "তারিখ" কলামে পরিবর্তনের অর্থ চাইতে পারেন created_atকরতে updated_atবা যারা লাইন, যা আমি খুব সাধারণ ক্ষেত্রে হতে খুঁজে বরাবর অন্য কোন পরিবর্তন।

কিছু ক্ষেত্রে আইডি কলাম যুক্ত করা আপনার ডিজাইন পরিবর্তিত হলে আপনাকে আরও নমনীয়তা দেবে।


সারণি তৈরি এবং আপডেট হওয়ার সময় ট্র্যাকিংয়ের জন্য +1 তৈরি করা তারিখ_সামান্য এবং তারিখ_মোডিফাইড যুক্ত করা খুব কার্যকর। সংগ্রহস্থল / ডেটা গুদাম হালনাগাদ সম্পর্কিত সমস্যাগুলি অনুসন্ধান করার সময় এটি স্বর্ণের ওজনের worth
রবি ডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.