বহু-ভাষা ডাটাবেস ডিজাইনের জন্য সেরা অনুশীলনগুলি কী কী? [বন্ধ]


193

বহু-ভাষা ডেটাবেস তৈরির সর্বোত্তম উপায় কী? প্রতিটি টেবিলের জন্য স্থানীয় টেবিল তৈরি করতে ডিজাইন তৈরি এবং কোয়েরি জটিল তৈরি করা হচ্ছে, অন্য ক্ষেত্রে প্রতিটি ভাষার জন্য কলাম যুক্ত করা সহজ তবে গতিশীল নয়, দয়া করে আমাকে এন্টারপ্রাইজ অ্যাপ্লিকেশনগুলির জন্য সেরা চয়নটি বুঝতে সাহায্য করুন



3
আমি এটি আমার কাছে খুব সহায়ক বলে খুঁজে পেয়েছি: মাইএসকিউএল
ভাষায় বহুভাষার

উত্তর:


223

আমরা যা করি তা হ'ল প্রতিটি বহুভাষিক বস্তুর জন্য দুটি টেবিল তৈরি করা।

উদাহরণস্বরূপ প্রথম টেবিলটিতে কেবলমাত্র ভাষা-নিরপেক্ষ ডেটা (প্রাথমিক কী ইত্যাদি) রয়েছে এবং দ্বিতীয় সারণীতে ভাষার প্রতি স্থানীয় রেকর্ডযুক্ত ভাষা ডেটা এবং আইএসও কোড রয়েছে code

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

উদাহরণ:

Table "Product":
----------------
ID                 : int
<any other language-neutral fields>


Table "ProductTranslations"
---------------------------
ID                 : int      (foreign key referencing the Product)
Language           : varchar  (e.g. "en-US", "de-CH")
IsDefault          : bit
ProductDescription : nvarchar
<any other localized data>

এই পদ্ধতির সাহায্যে আপনি প্রয়োজনীয় প্রতিটি ভাষা হ্যান্ডেল করতে পারবেন (প্রতিটি নতুন ভাষার জন্য অতিরিক্ত ক্ষেত্র যুক্ত না করে)।


আপডেট (২০১৪-১২-১৪): অ্যাপ্লিকেশনটিতে বহুভাষিক ডেটা লোড করতে ব্যবহৃত বাস্তবায়ন সম্পর্কে কিছু অতিরিক্ত তথ্যের জন্য দয়া করে এই উত্তরটি একবার দেখুন ।


15
যদি একমাত্র ভাষা-নিরপেক্ষ ক্ষেত্রটি আইডি হয়? এবং একটি সারি সন্নিবেশ করার সময় আপনি কীভাবে বিদেশী কী উল্লেখটি সন্নিবেশ করান?
টিমো হুভিনেন

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

5
এখানে একটি বিষয় লক্ষণীয় হ'ল হয় হয় এই টেবিলটিতে কোনও পিকে থাকবে না অথবা আইডি এবং ভাষা সংমিশ্রিত পিকে হবে। হয় যেটি হয়, বা আপনাকে প্রোডাক্ট ট্রান্সলেশনআইডি ফিল্ড যুক্ত করতে হবে, সম্ভবত একটি পরিচয় হিসাবে।
ড্যানিয়েল লরেঞ্জ 19

1
@ লুকা: আমি আপনার প্রশ্নের উত্তর দিয়েছি, ডেটা লোড করার জন্য আমি কী প্রয়োগ (গুলি) ব্যবহার করে তা দেখিয়েছি।
এম

1
@ আড়ানগুটিরিজ ভাল, মজাদারভাবে আপনি একক কলাম সহ একটি টেবিল তৈরি করেছেন id: ড। ব্যাখ্যা করার জন্য প্রতিটি idএকটি অর্থ যা আপনি একটি রিলেশনাল টেবিল কোনো ভাষা থেকে শব্দ সংযুক্ত করতে পারেন, তাই আপনি দুই টেবিল পেতে, প্রতিনিধিত্ব করে meaning(ID) এবং word(আইডি, meaning_id), idমধ্যে wordটেবিল শব্দ আইডি প্রতিনিধিত্ব করে, idএর মধ্যে meaningপ্রতিনিধিত্ব করে অর্থ যে সর্বজনীন।
টিমো হুভিনেন

18

আমি মার্টিন পোস্ট করা উত্তর সুপারিশ।

তবে আপনার প্রশ্নগুলি খুব জটিল হওয়ার বিষয়ে আপনি উদ্বিগ্ন বলে মনে করছেন:

প্রতিটি টেবিলের জন্য স্থানীয় টেবিল তৈরি করতে ডিজাইন তৈরি করা হচ্ছে এবং জটিল জিজ্ঞাসা করা হচ্ছে ...

সুতরাং আপনি ভাবতে পারেন, এটি এর মতো সহজ প্রশ্নগুলি লেখার পরিবর্তে:

SELECT price, name, description FROM Products WHERE price < 100

... আপনার মতো প্রশ্নগুলি লিখতে হবে:

SELECT
  p.price, pt.name, pt.description
FROM
  Products p JOIN ProductTranslations pt
  ON (p.id = pt.id AND pt.lang = "en")
WHERE
  price < 100

খুব সুন্দর দৃষ্টিকোণ নয়।

তবে এটি ম্যানুয়ালি করার পরিবর্তে আপনার নিজের ডাটাবেস অ্যাক্সেস ক্লাসটি বিকাশ করা উচিত, যা এসকিউএলকে প্রাক-পার্স করে যা আপনার বিশেষ স্থানীয়করণের মার্কআপ রাখে এবং এটি আপনাকে সত্যিকারের এসকিউএলে রূপান্তর করে আপনাকে ডাটাবেসে প্রেরণ করতে হবে।

এই সিস্টেমটি ব্যবহার করা এ জাতীয় কিছু দেখতে পারে:

db.setLocale("en");
db.query("SELECT p.price, _(p.name), _(p.description)
          FROM _(Products p) WHERE price < 100");

এবং আমি নিশ্চিত যে আপনি এটি আরও ভাল করতে পারেন।

কীটি হ'ল আপনার টেবিলগুলি এবং ক্ষেত্রগুলির নাম অভিন্ন পদ্ধতিতে।


অন্য প্রশ্নটি হল, পণ্যটির জন্য একটি ব্যবসায়িক অবজেক্ট তৈরি করা? বা দুটি তৈরি করতে ... প্রথম ক্ষেত্রে সেই আইটেমটির সাথে কাজ করা সহজ, 2 তম সিএমএস লিখতে সহজ
আর্সেন এমক্রটিচায়ান

14

আমি এই ধরণের পদ্ধতির জন্য কাজ করে দেখি:

পণ্য পণ্য বিবরণ দেশ
======================================
প্রোডাক্ট আইডি প্রোডাক্ট ডেটায়েল আইডি কান্ট্রি আইডি
- ইত্যাদি - প্রোডাক্টআইডি দেশ নাম
            কান্ট্রিআইডি ভাষা
            পণ্য নাম - ইত্যাদি -
            পণ্যের বর্ণনা
            - ইত্যাদি -

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


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

8
দেশ এবং ভাষা (স্থানীয়) আলাদা জিনিস। এবং আইএসও ভাষার কোডগুলি প্রাকৃতিক কী, আপনি ল্যাং থেকে দেশে অপ্রয়োজনীয় যোগদানকে মুছে ফেলেন।
গ্যাভেনকোয়া

10

আমি পরবর্তী পদ্ধতি ব্যবহার করছি:

প্রোডাক্ট

ProductID অর্ডারআইডি, ...

পণ্যর বিবরণ

প্রোডাক্ট আইডি শিরোনামের নাম ভাষাআইডি

ভাষা

ভাষা আইডি নাম সংস্কৃতি, ....


2

মার্টিনের সমাধানটি আমার সাথে সাদৃশ্যপূর্ণ, তবে যখন পছন্দসই অনুবাদটি পাওয়া যায় না তখন আপনি কীভাবে একটি ডিফল্ট বিবরণ পরিচালনা করবেন?

এর জন্য কি প্রতিটি ক্ষেত্রের জন্য একটি আইএফএনইউএল () এবং অন্য একটি নির্বাচনী বিবৃতি প্রয়োজন?

ডিফল্ট অনুবাদ একই টেবিলে সংরক্ষণ করা হবে, যেখানে "isDefault" এর মতো একটি পতাকাটি ওয়েদারকে নির্দেশ করে যে বর্তমান ভাষার জন্য আর কোনও সন্ধান পাওয়া যায় নি।


1
: @GorrillaApe: এই উত্তর উদাহরণের জন্য কিভাবে ডিফল্ট ভাষা ফিরে আসবে, যদি পছন্দসই ভাষা পাওয়া যায়নি দেখতে stackoverflow.com/a/27474681/19635
M4N
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.