আরেকটি পদ্ধতির মধ্যে এমন একটি অ্যাসোসিয়েশন টেবিল তৈরি করা হয় যাতে প্রতিটি সম্ভাব্য সংস্থানীয় সংস্থার জন্য কলাম থাকে। আপনার উদাহরণে, বিদ্যমান দুটি মালিকের প্রত্যেকের নিজস্ব নিজস্ব টেবিল রয়েছে (যার অর্থ আপনার কাছে উল্লেখ করার মতো কিছু আছে)। যদি সর্বদা এটি হয় তবে আপনার এর মতো কিছু থাকতে পারে:
CREATE TABLE dbo.Group
(
ID int NOT NULL,
Name varchar(50) NOT NULL
)
CREATE TABLE dbo.User
(
ID int NOT NULL,
Name varchar(50) NOT NULL
)
CREATE TABLE dbo.Ticket
(
ID int NOT NULL,
Owner_ID int NOT NULL,
Subject varchar(50) NULL
)
CREATE TABLE dbo.Owner
(
ID int NOT NULL,
User_ID int NULL,
Group_ID int NULL,
{{AdditionalEntity_ID}} int NOT NULL
)
এই সমাধানের সাহায্যে আপনি ডাটাবেসে নতুন সত্ত্বা যুক্ত করার সাথে সাথে নতুন কলামগুলি যুক্ত করতে থাকবেন এবং আপনি @ নাথন স্কারেলের দেখানো বিদেশী কী সীমাবদ্ধতা প্যাটার্নটি মুছবেন এবং পুনরায় তৈরি করবেন। এই সমাধানটি @ নাথন স্কারেলের সাথে খুব মিল তবে ভিন্ন দেখাচ্ছে (পছন্দ পর্যন্ত)।
যদি আপনি প্রতিটি নতুন মালিকের ধরণের জন্য একটি নতুন টেবিল না রাখেন তবে প্রতিটি সম্ভাব্য মালিকের জন্য বিদেশী কী কলামের পরিবর্তে একটি মালিক_প্রকার অন্তর্ভুক্ত করা ভাল হবে:
CREATE TABLE dbo.Group
(
ID int NOT NULL,
Name varchar(50) NOT NULL
)
CREATE TABLE dbo.User
(
ID int NOT NULL,
Name varchar(50) NOT NULL
)
CREATE TABLE dbo.Ticket
(
ID int NOT NULL,
Owner_ID int NOT NULL,
Owner_Type string NOT NULL, -- In our example, this would be "User" or "Group"
Subject varchar(50) NULL
)
উপরের পদ্ধতিটি সহ আপনি যতগুলি মালিকানার প্রকারের পছন্দগুলি যোগ করতে পারেন Owner_ID এর কোনও বিদেশী কী বাধা থাকবে না তবে অন্য সারণির রেফারেন্স হিসাবে ব্যবহৃত হবে। ক্ষয়ক্ষতিটি হ'ল স্কীমার উপর ভিত্তি করে এটি মালিকানাধীন কী রয়েছে তা দেখার জন্য আপনাকে টেবিলটি দেখতে হবে। আমি কেবলমাত্র এটির পরামর্শ দিই যদি আপনি আগে থেকে মালিকের প্রকারগুলি জানেন না এবং তারা অন্য টেবিলের সাথে লিঙ্ক করবেন না। আপনি যদি আগে থেকে মালিকের প্রকারগুলি জানেন তবে আমি @ নাথন স্কারেলের মতো একটি সমাধান নিয়ে যাব।
দুঃখিত যদি আমার কিছু এসকিউএল ভুল হয় তবে আমি এটি একসাথে ছুঁড়ে ফেলেছি।