ডেটা গুদামে একাধিক থেকে বহু সম্পর্ক কার্যকর করার কিছু উপায় কী?


25

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

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


আপনার আপনার প্রশ্নটি আরও স্পষ্ট করে বলা দরকার। এটি সম্ভবত এই কারণেই 4-এর পরে কেউ এর জবাব দেয়নি। আমার উত্তরের জবাবে আপনি যা বক্তব্য রেখেছেন তা আপনার মূল প্রশ্নের মতো নয়।
IamIC

@ আইএনসি সম্পাদিত। ইহা কি ভালো?
ব্রায়ান বলসুন-স্ট্যান্টন

নিখুঁত :)
IamIC

উত্তর:


17

আমার অভিজ্ঞতায়, একটি পুনরাবৃত্ত হায়ারার্কি হ'ল এটি মোকাবেলার সর্বাধিক ব্যবহারিক উপায়। এটি নিম্নলিখিত সুবিধাগুলি সরবরাহ করে:

  1. সীমাহীন গভীরতা।
  2. সংহতি।
  3. নমনীয়তা.
  4. গতি.

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

ফিল্টারড সূচকগুলি ব্যবহার করে, শ্রেণিবিন্যাসের একটি বড় টেবিল উত্সর্গীকৃত টেবিলের চেয়ে উচ্চতর গতিতে পারফর্ম করতে পারে। "যোগদানের টেবিলে ডাটা টেবিলে যোগ দিতে" তুলনায় প্রতিটি যোগদানের কারণটি কেবল "পিতামাতা-সন্তানের" হয়। পরবর্তীটির প্রক্রিয়াজাতকরণ এবং সঞ্চয় করার জন্য আরও সূচী রয়েছে।

আমি বহু বছর ধরে এই সমস্যাটি সমাধান করার চেষ্টা করছি। সম্প্রতি, আমি এটি নিয়ে এসেছি is


1
আপনি জিজ্ঞাসা করেছিলেন "এই অনেকগুলি থেকে অনেককে মডেলিংয়ের কয়েকটি উপায় কী এবং তাদের অভিনয় এবং গ্রানুলারিটির প্রভাবগুলি কী?" আমি মডেলিংয়ের উপর জবাব দিলাম। ডাউন-ভোট দেওয়ার দরকার নেই।
IamIC

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

2
হ্যাঁ, তারা এটিকে স্থানীয়ভাবে মডেল করে না। আরও একটি টেবিল যুক্ত করা এবং যোগদানের সাথে কী ভুল হবে, এভাবে বহু থেকে বহু অর্জন করে? একটি আরডিবিএমএসে, আপনি আপনার টেবিলগুলি কীভাবে গঠন করেন তা বিবেচনা না করেই আপনি বহু-বহু-লোকের জন্য ২ জন যোগ দিতে চলেছেন। কোনও শর্টকাট নেই। পোস্টগ্র্রেএসকিউএল বা ক্যাচ / এম এর একমাত্র সম্ভাব্য ব্যতিক্রম ar
IamIC

1
(আসলে একটি পুনরাবৃত্ত হায়ারার্কি একটি ভাল ধারণা,) আমি সমস্যার সমাধান করার একটি উপায়টি একটি মাত্রার মধ্যে সম্ভাব্য বহু থেকে বহু সম্পর্কের তালিকার প্রাক্কুট তৈরি করা ছিল, এটি একটি সাধারণ মাত্রা টেবিলের সাথে উল্লেখ করে এবং তারপরে ফ্যাক্ট টেবিলে যোগ দেওয়া joining সংক্ষিপ্ত আকারের টেবিল। আপনার "পুনরাবৃত্ত হায়ারার্কি" এর উত্তর আরেকটি দরকারী ডিজাইনের উত্তর। আমি ভাবছি যে এই বিভিন্ন হ্যাকের পারফরম্যান্সের প্রভাব সম্পর্কে কোনও গবেষণা হয়েছে কিনা?
ব্রায়ান বলসুন-স্ট্যান্টন

3
@ ব্রায়ান দরকারী উত্তরের জন্য ভোট ভুলবেন না। এটি সম্প্রদায় তৈরি করতে সহায়তা করে। আপনার প্রশ্নের উত্তর দেওয়ার জন্য, "দ্রুত কি: একটি পুনরাবৃত্তি সিটিই বা ম্যানুয়াল ট্রি বিল্ড?" ব্যতীত আমি এই হ্যাকগুলির বিষয়ে কোনও গবেষণা পাইনি। আপনি পূর্বে উল্লিখিত সমাধানটি ভাল বোঝায়। আমি এটিকে একটি সূচিযুক্ত দৃশ্যের সাথে একত্রিত করব, অবশ্যই কোনটি নিশ্চিত করে যে আপনার কাছে সর্বদা সঠিক প্রাক-জনবহুল সম্পর্কের মানচিত্র রয়েছে।
IamIC

6

এম এর জন্য কিছু পরিস্থিতি: ডেটা গুদামের মডেলটিতে এম সম্পর্ক

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

দৃশ্য 1: এম: একটি ফ্যাক্ট টেবিলের উপর এম মাত্রা

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

বিকল্প 1 - এম: এম ড্রাইভার-ফ্যাক্ট ব্রিজ টেবিলটিতে এতে একটি বিশাল পরিমাণের ডেটা থাকবে, কারণ এতে প্রদত্ত নীতিমালার জন্য ড্রাইভার এক্স লেনদেনের সারি রয়েছে। এসএসএএস সরাসরি এই ডেটা স্ট্রাকচার গ্রাস করতে পারে তবে কোনও রোলাপ সরঞ্জামের মাধ্যমে কোয়েরি করা ধীর।

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

বিকল্প 2 - ডামি 'সংমিশ্রণ' মাত্রা সারণি যদি আপনি কোনও ফ্যাক্ট টেবিলটিতে সাধারণ কোডগুলির একটি তালিকা ম্যাপিং করে থাকেন (যেমন লিঙ্কযুক্ত সংস্থাগুলি ফ্যাক্ট সারিটির সাথে অদ্ভুত নয়) তবে আপনি আরও একটি পদ্ধতির গ্রহণ করতে পারেন যা ডেটা ভলিউমকে হ্রাস করবে। এই ধরণের দৃশ্যের একটি উদাহরণ একটি ইনসিপেন্টেন্ট ভিজিটের আইসিডি কোড। প্রতিটি ইনপিশেন্ট ভিজিটের এক বা একাধিক আইসিডি নির্ণয় এবং / বা এর বিপরীতে তালিকাভুক্ত পদ্ধতি থাকবে। আইসিডি কোডগুলি বিশ্বব্যাপী।

এই ক্ষেত্রে, আপনি প্রতিটি ক্ষেত্রে কোডের সংমিশ্রণের একটি স্বতন্ত্র তালিকা তৈরি করতে পারেন। প্রতিটি স্বতন্ত্র সংমিশ্রণের জন্য একটি সারি সহ একটি ডাইমেনশন টেবিল তৈরি করুন এবং আইসিডি কোডগুলির জন্য সংমিশ্রণ এবং রেফারেন্স সারণীর মধ্যে একটি লিঙ্ক টেবিল রাখুন।

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

বিকল্প 1 এর সুবিধা: - যথাযথভাবে সূচকযুক্ত, এম: এম টেবিলের মাধ্যমে একটি নির্দিষ্ট সম্পর্কের সাথে ফ্যাক্ট টেবিল সারি নির্বাচন করার উপর ভিত্তি করে প্রশ্নগুলি যুক্তিসঙ্গতভাবে দক্ষ হতে পারে।

  • সামান্য সরল ধারণাগত মডেল

বিকল্প 2 এর সুবিধা: - ডেটা স্টোরেজ আরও কমপ্যাক্ট

  • আপনি 'সংশ্লেষ' মাত্রাটির কোড হিসাবে একটি মানব-পঠনযোগ্য ফর্ম্যাটে সংশ্লেষগুলি উপস্থাপন করে একটি সরাসরি 1: এম সম্পর্ক অনুকরণ করতে পারেন। এটি এম: এম সম্পর্কের জন্য সাপোর্টের ঘাটতির রিপোর্টিং সরঞ্জামগুলিতে আরও কার্যকর হতে পারে।

দৃশ্য 2: এম: মাত্রার মধ্যে এম সম্পর্ক:

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

এই ক্ষেত্রে আপনি এম: এম সম্পর্ক স্থাপন করতে পারেন, এবং সম্ভবত তাদেরকে বেস-মাত্রায় মানব-পঠনযোগ্য রেন্ডারিং কোড করতে পারেন। সম্পর্কগুলি সরাসরি এম: এম লিঙ্ক টেবিলের মাধ্যমে বা পূর্বের মতো একটি ব্রিজিং 'সংমিশ্রণ' টেবিলের মাধ্যমে করা যেতে পারে। এই ডেটা স্ট্রাকচারটি বিজনেস অবজেক্টস বা আরও ভাল মানের রোলাপ সরঞ্জামগুলির মাধ্যমে সঠিকভাবে অনুসন্ধান করা যেতে পারে।

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


5

আপনার মডেলটিতে আপনি কী ধরনের বহু থেকে বহু সম্পর্কের কথা মনে রেখেছেন তা হ'ল আমি জানতে চাই, তা যেমন হয় লেনদেনের সিস্টেমে বা বর্তমানে যা কিছু ডেটা মডেল রয়েছে in

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

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


ভাল উত্তর. এখানে দুটি মামলা রয়েছে যা আমি অন্বেষণ করছি। একটি এন: এম সত্য ও মাত্রা এবং একটি মধ্যে 1: এন: এম, সত্য, মাত্রা এবং মাত্রা মধ্যে।
ব্রায়ান বলসুন-স্ট্যান্টন

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

@ ব্রায়ান বলসুন-স্ট্যান্টন হিসাবে 1: এন: এম, এটি একটি তুষারকণা, আমার ধারণা, এবং আমি তা এড়াতে চাইছি। আপনি যদি অন্য তারকাদের (বা সেতু) সংজ্ঞা দিতে চান তবে মাত্রাগুলির মধ্যে সম্পর্কের জন্য এটি ঠিক আছে। মনে রাখবেন যে একটি মাত্রিক ডেটা গুদামটি স্বাভাবিক করা হয় না এবং সর্বোপরি এটি ব্যবহারিক কাঠামো নির্দিষ্ট ধরণের অপারেশনগুলিকে সমর্থন করার জন্য ডিজাইন করা হয়েছে, বিশেষত বাস্তব-বিশ্বের সত্তার সম্পর্কের প্রতিনিধিত্ব করতে বা অপ্রয়োজনীয়তা দূর করতে নয়।
ক্যাড রক্স 12'11

1
@ ব্রায়ান বলসুন-স্ট্যান্টন কিমবল ফোরাম এবং তার টুলকিট বইগুলিতে সেতু এবং আউটরিগারদের কী বলে সে সম্পর্কে একটি নজর দিন: ফোরাম.কিম্বলগ্রুপ.com/…
ক্যাড

@ কেড আপনি কি সেগুলি বর্ণনা করে একটি উত্তর দিতে পারেন? :)
ব্রায়ান বলসুন-স্টানটন

5

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

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

ব্রিজ টেবিল ব্যবহার করে বিকল্প শ্রেণিবিন্যাসের মডেলিং:

http://www.kimballgroup.com/wp-content/uploads/2012/05/DT62Alternative.pdf

বহু সম্পর্কের ক্ষেত্রে অনেকের জন্য তিনটি বিকল্প (সংখ্যার শেয়ারের বরাদ্দের সাথে আবদ্ধ - কিছু আকর্ষণীয় পিছনে পিছনে মন্তব্য দেখুন)

http://www.pythian.com/news/364/implementing-many-to-many-relationships-in-data-warehousing/

দুর্ভাগ্যক্রমে, কিমবলের অনেক তথ্য সপ্তাহ / ডিবিএমএস ম্যাগ নিবন্ধগুলির আর ভাল লিঙ্ক নেই ...


'বিকল্প শ্রেণিবিন্যাস' নিবন্ধটির লিঙ্কটি নষ্ট হয়ে গেছে। হতে পারে আপনি এটিকে উল্লেখ করছেন: kimballgroup.com/html/designtipsPDF/DesignTips2004/…
এন্ডি

অনেককে অনেক নিবন্ধের লিঙ্কের জন্য ধন্যবাদ । আমার 'আহা!' এটি থেকে মুহূর্ত।
এন্ডি তেজহোনো

দ্বিতীয় লিঙ্কটি মারা গেছে। এখানে একই নিবন্ধটির একটি নতুন লিঙ্ক is এটি কিছুটা গার্ফড, তবে কোনও একক সময়ে এর সমস্ত গ্রাফিক্স হারিয়ে গেছে। blog.pythian.com/…
পোস্টফ্যান

1

এটি সমাধান করার একটি উপায় হ'ল একটি ফ্যাক্ট টেবিলের মাত্র 2 টি কলাম থাকতে পারে, 2 টি মাত্রা থেকে বহু সম্পর্কযুক্ত জাহাজের সাথে অনেকগুলি বিদেশী কী রয়েছে।


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