RESTful API এর জন্য এসকিউএল ডেটাবেস স্ট্রাকচার


11

আমি একটি RESTful API তৈরি করছি। আমি আমার সংস্থানসমূহের চারপাশে আমার ডাটাবেস টেবিলগুলি ডিজাইনের সর্বোত্তম উপায়ে সিদ্ধান্ত নিতে সংগ্রাম করছি am

প্রাথমিকভাবে, যদিও আমি সম্পদ প্রতি টেবিলটি যেতে ভাল উপায় হবে তবে আমি এখন শঙ্কিত যে এর ফলে আপনি যে রিসোর্স চেইনটি আরও নিচে চলে যাবেন তা তত দ্রুততর টেবিলের ফলস্বরূপ হবে।

উদাহরণস্বরূপ, কল্পনা করুন আমার কাছে তিনটি সংস্থান রয়েছে - ব্যবহারকারী, ক্লায়েন্ট, বিক্রয়। ব্যবহারকারীরা আমার এপিআই-র গ্রাহক, ক্লায়েন্টগুলি ব্যবহারকারী গ্রাহক এবং বিক্রয় প্রতিটি ক্লায়েন্টের ব্যবহারকারীর অ্যাকাউন্টে করা ক্রয়।

নিম্নলিখিত হিসাবে একটি বিক্রয় সম্পদ অ্যাক্সেস করা হয়

GET /users/{userID}/clients/{clientID}/sales/{salesID}

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

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

অনুসন্ধান চালানোর আগে টেবিলগুলিতে যোগদান করাও প্রয়োজনীয় হবে। কারণটি হ'ল আমি প্রতিটি ব্যবহারকারীর একই নামে ক্লায়েন্ট থাকার অনুমতি দিই। ভুল ক্লায়েন্টের ডেটা পেতে এড়াতে, ব্যবহারকারীর টেবিল এবং ক্লায়েন্টের টেবিলগুলি {ইউজারআইডি by এর সাথে যুক্ত হয়} এটি বিক্রয় ক্ষেত্রেও এটি। বড় টেবিলগুলিতে যোগ দেওয়া এবং দৌড়ানোর জিনিসগুলি আরও ধীরে ধীরে পড়তে এবং লিখতে হবে?

উত্তর:


31

আমি আমার সংস্থানসমূহের চারপাশে আমার ডাটাবেস টেবিলগুলি ডিজাইনের সর্বোত্তম উপায়ে সিদ্ধান্ত নিতে সংগ্রাম করছি am

না।

আপনার এআইপিটি আরএসএফুল প্রিন্সিপাল অনুযায়ী ডিজাইন করুন , নরমালাইজেশন নীতি অনুসারে আপনার ডাটাবেসটি ডিজাইন করুন । একজনের উপর অন্যটির প্রভাব পড়ার দরকার নেই।

আপনার ডাটাবেসে কোনও SaleResourceসারণী থাকা উচিত নয় , এতে একটি Sale(বা ক্রয় / ক্রম) সারণী থাকা উচিত । এই টেবিলটিতে একটি প্রাথমিক কী অন্তর্ভুক্ত থাকবে যা সম্পর্কিত ব্যবহারকারী এবং গ্রাহক টেবিলগুলির জন্য বিক্রয় এবং বিদেশী কীগুলি অনন্যভাবে সনাক্ত করে।

আপনি REST এপিআই GET /users/{userID}/clients/{clientID}/sales/{salesID}যথাযথ ডাটাবেস ক্যোয়ারী দ্বারা চিহ্নিত সংস্থার জন্য একটি অনুরোধ অনুবাদ করবেন , সারিটি পুনরুদ্ধার করবেন, যে বিক্রয়টি উপস্থাপন করবে এমন সংস্থান তৈরি করবে এবং ক্লায়েন্টকে ফিরিয়ে দেবে।

সচেতন থাকুন যে আপনি বর্তমানে অভ্যন্তরীণ ডাটাবেস শনাক্তকারী (ইউজারআইডি / ক্লায়েন্টআইডি / সেলসআইডি) বাইরের বিশ্বে প্রকাশ করছেন। এটি আপনার ক্ষেত্রে উপযুক্ত হতে পারে তবে সাধারণত <entity>IDএকটি RESTful API এ অনুভূত হয়।


ধন্যবাদ। সুতরাং আপনি মূলত যা বলছেন তা হ'ল যতক্ষণ আমি আমার ডাটাবেসগুলি যথাযথভাবে নির্ধারণ করি এবং যথাযথ সূচক ইত্যাদি সেটআপ করি, আমি যা অর্জন করতে চাই তার জন্য কোনও পারফরম্যান্সের সমস্যা হওয়া উচিত নয়
Gaz_Edge

3
হ্যাঁ. আপনি উল্লেখ করেছেন এমন কোনও কিছুই সাধারণীকরণের স্কিমা থেকে বিচ্যুত হওয়ার পরামর্শ দেয় না।
মার্ক স্টোর-স্মিথ

9

প্রাসঙ্গিক ডাটাবেসগুলি (অতএব এসকিউএল) বিশাল টেবিল থেকে এক (বা কয়েকটি) সারি সনাক্ত করতে সত্যই ভাল। সূচকের জন্য এটিই। যোগ দেওয়ার সাথে সাথে এগুলি বেশ দুর্দান্ত aw আপনার সত্যিই কোন প্রশ্ন নেই । লাইনের মধ্যে, আপনি মূলত একটি বহু-ভাড়াটে ডাটাবেস ডিজাইন কীভাবে করবেন সে সম্পর্কে জিজ্ঞাসা করছেন। আমি আপনাকে আরও প্রশ্ন জিজ্ঞাসার আগে মাল্টি-টেন্যান্ট ডেটা আর্কিটেকচার পড়ার পরামর্শ দিচ্ছি । নিদর্শনগুলির মধ্যে একটি বেছে নিন (পৃথক ডাটাবেস, ভাগ করা ডাটাবেস পৃথক স্কিমা, ভাগ করা ডাটাবেস ভাগ করে নেওয়া স্কিমা) এবং তারপরে আমরা স্পেসিফিকেশনগুলি নিয়ে আলোচনা করব। এই মুহূর্তে আপনি কেবল সর্বশেষ প্যাটার্নটি কল্পনা করেছেন, তবে উপকারিতা এবং মতামত বিবেচনা করেন নি। পড়া.

পার্শ্ব নোট হিসাবে: আপনার user/{userID}ইউআরআই তে লাগবে না। প্রমাণীকরণ তথ্য থেকে আপনি ভাড়াটিয়া (ইউজারআইডি) জানেন।


ধন্যবাদ- হ্যাঁ আমাকে আরও পড়তে হবে। আমার আজকের প্রকল্পগুলিতে খুব কম ডাটাবেসের কাজ হয়েছে। আপনার প্রস্তাবিত সংস্থানটি আমি পড়ব
Gaz_Edge

আমি মনে করি ভাগ করে নেওয়া আমার জন্য যাওয়ার উপায়। আমার 'ব্যবহারকারীরা' ভাড়াটে নয়। তাদের পৃথকীকরণের ডেটা প্রয়োজন হয় না এবং কোনও ডাটাবেস পরিচালনার কাজে সরাসরি অ্যাক্সেসের প্রয়োজন হবে না। আমি যা পড়েছি তা থেকে, এই প্রস্তাবটি ভাগ করে নেওয়া সবচেয়ে ভাল? আপনি কি মনে করেন?
গাজ_এডেজ

2
ভাগ করা সবচেয়ে সহজ। আপনাকে অবশ্যই user_idপ্রতিটি টেবিলের কী হিসাবে যুক্ত করতে হবে এবং left.user_id = right.user_idপ্রাসঙ্গিক যোগ দিতে হবে (সাধারণত, সমস্ত)। কিছু ওআরএম অ্যাক্সেস স্কোপিং সমর্থন করে। আর বোকা বানানো যাবে না, আপনার ব্যবহারকারীদের দ্বারা ভাড়াটেদের, যেহেতু আপনি ব্যবহারকারী 'foo বিন্যাস' চাই না দেখতে / ব্যবহারকারী 'দন্ড' বিক্রয় পরিবর্তন করুন।
রিমাস রুসানু

ধন্যবাদ। আমি দেখতে শুরু করেছি যে সূচিগুলি আমার ডাটাবেস কাঠামো তৈরির মূল চাবিকাঠি।
গাজ_এডেজ

0

এখানে ইতিমধ্যে যা বলা হয়েছে কেবল তা যুক্ত করতে - আপনি প্রকৃত API এবং আপনার ডাটাবেস স্তরটির মধ্যে একটি ইন্টারফেস তৈরি করতে চাইতে পারেন। এটি ক্যাশিং এবং সংক্ষিপ্ত সারণীগুলি লাইনের নিচে সহজ করে তোলে ...


1
কিছু লিঙ্ক বা আরও ব্যাখ্যা সহায়ক হবে
Gaz_Edge

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