নিম্নোক্ত বিবেচনা কর:
entity User
{
autoincrement uid;
string(20) name;
int privilegeLevel;
}
entity DirectLoginUser
{
inherits User;
string(20) username;
string(16) passwordHash;
}
entity OpenIdUser
{
inherits User;
//Whatever attributes OpenID needs... I don't know; this is hypothetical
}
বিভিন্ন ধরণের ব্যবহারকারী (সরাসরি লগইন ব্যবহারকারী এবং ওপেনআইডি ব্যবহারকারী) আইএস-এ সম্পর্ক প্রদর্শন করে; যথা, উভয় ধরণের ব্যবহারকারীই ব্যবহারকারী। আরডিবিএমএসে এটি উপস্থাপনের বিভিন্ন উপায় রয়েছে:
ওয়ে এক
CREATE TABLE Users
(
uid INTEGER AUTO_INCREMENT NOT NULL,
name VARCHAR(20) NOT NULL,
privlegeLevel INTEGER NOT NULL,
type ENUM("DirectLogin", "OpenID") NOT NULL,
username VARCHAR(20) NULL,
passwordHash VARCHAR(20) NULL,
//OpenID Attributes
PRIMARY_KEY(uid)
)
ওয়ে দুই
CREATE TABLE Users
(
uid INTEGER AUTO_INCREMENT NOT NULL,
name VARCHAR(20) NOT NULL,
privilegeLevel INTEGER NOT NULL,
type ENUM("DirectLogin", "OpenID") NOT NULL,
PRIMARY_KEY(uid)
)
CREATE TABLE DirectLogins
(
uid INTEGER NOT_NULL,
username VARCHAR(20) NOT NULL,
passwordHash VARCHAR(20) NOT NULL,
PRIMARY_KEY(uid),
FORIGEN_KEY (uid) REFERENCES Users.uid
)
CREATE TABLE OpenIDLogins
(
uid INTEGER NOT_NULL,
// ...
PRIMARY_KEY(uid),
FORIGEN_KEY (uid) REFERENCES Users.uid
)
ওয়ে থ্রি
CREATE TABLE DirectLoginUsers
(
uid INTEGER AUTO_INCREMENT NOT NULL,
name VARCHAR(20) NOT NULL,
privlegeLevel INTEGER NOT NULL,
username VARCHAR(20) NOT NULL,
passwordHash VARCHAR(20) NOT NULL,
PRIMARY_KEY(uid)
)
CREATE TABLE OpenIDUsers
(
uid INTEGER AUTO_INCREMENT NOT NULL,
name VARCHAR(20) NOT NULL,
privlegeLevel INTEGER NOT NULL,
//OpenID Attributes
PRIMARY_KEY(uid)
)
আমি প্রায় নিশ্চিত তৃতীয় উপায়টি ভুল উপায়, কারণ ডেটাবেসের অন্য কোথাও ব্যবহারকারীর বিরুদ্ধে সরল যোগদান সম্ভব নয়।
আমার আসল বিশ্বের উদাহরণটি যদিও বিভিন্ন লগইনের উদাহরণ সহ ব্যবহারকারী নয়; এই সম্পর্কটিকে সাধারণ ক্ষেত্রে কীভাবে মডেল করা যায় সে সম্পর্কে আমি আগ্রহী।