দুর্ভাগ্যক্রমে ypercubeᵀᴹ এর উত্তর সম্পর্কে মন্তব্য করার মতো পর্যাপ্ত প্রতিভা আমার নেই, সুতরাং পরিবর্তে আমি একটি বিকল্প উত্তর পোস্ট করব - আমি সাধারণভাবে এই উত্তরটির সাথে একমত হই তবে মনে করি প্রাথমিক AlbumTrack
অ্যালবাম এবং ট্র্যাক দুটোই দুর্বল হওয়ায় প্রাথমিক কী এবং অনন্য প্রতিবন্ধগুলি ভুল রয়েছে সত্ত্বা। উদাহরণস্বরূপ, নিম্নলিখিত বৈধ ডেটা, নির্ধারিত সীমাবদ্ধতার সাথে মঞ্জুরিপ্রাপ্ত হবে:
artistID | albumID | trackID | trackNo
----------+---------+---------+---------
1 | 1 | 1 | 1
2 | 1 | 1 | 1
পরিবর্তে আমি PRIMARY KEY (artistID, albumID, trackID)
অনন্য বাধা সেট করে ফেলে দেব , যার ফলস্বরূপ:
CREATE TABLE Artist
( artistID INT NOT NULL
, name VARCHAR(100) NOT NULL
, PRIMARY KEY (artistID)
) ;
CREATE TABLE Album
( artistID INT NOT NULL
, albumID INT NOT NULL
, title VARCHAR(100) NOT NULL
, PRIMARY KEY (artistID, albumID)
, FOREIGN KEY (artistID)
REFERENCES Artist (artistID)
) ;
CREATE TABLE Track
( artistID INT NOT NULL
, trackID INT NOT NULL
, title VARCHAR(100) NOT NULL
, PRIMARY KEY (artistID, trackID)
, FOREIGN KEY (artistID)
REFERENCES Artist (artistID)
) ;
CREATE TABLE AlbumTrack
( artistID INT NOT NULL
, albumID INT NOT NULL
, trackID INT NOT NULL
, trackNo INT NOT NULL
, PRIMARY KEY (artistID, albumID, trackID)
, FOREIGN KEY (artistID, albumID)
REFERENCES Album (artistID, albumID)
, FOREIGN KEY (artistID, trackID)
REFERENCES Track (artistID, trackID)
) ;
ট্র্যাকগুলি এখনও অ্যালবামে একবারে ঘটতে সীমাবদ্ধ।
এছাড়াও, প্রশ্ন আসলে নির্দিষ্ট করে না যে ট্র্যাক (অ্যালবাম শুধু তাই) দুর্বল সত্ত্বা হয় - যদি গানগুলি আসলে শিল্পীদের স্বাধীন বিদ্যমান পারেন, Track
এবং AlbumTrack
টেবিল সামান্য ভিন্নভাবে সংজ্ঞায়িত করা হয়:
CREATE TABLE Track
( trackID INT NOT NULL
, artistID INT
, title VARCHAR(100) NOT NULL
, PRIMARY KEY trackID
, FOREIGN KEY (artistID)
REFERENCES Artist (artistID)
) ;
CREATE TABLE AlbumTrack
( artistID INT NOT NULL
, albumID INT NOT NULL
, trackID INT NOT NULL
, trackNo INT NOT NULL
, PRIMARY KEY (artistID, albumID, trackID)
, FOREIGN KEY (artistID, albumID)
REFERENCES Album (artistID, albumID)
, FOREIGN KEY (trackID)
REFERENCES Track (trackID)
) ;
artist_id
বিদেশী কী থাকতে পারে যা শিল্পীকে রেফারেন্স করে। আপনি যদি একক ট্র্যাক একাধিক অ্যালবামে ম্যাপ করতে চান তবে এর সাথে ম্যাপিং টেবিলটি ব্যবহার করুনtrack_id, album_id
। সহজ :)