एक उचित मॉडल जो संदर्भात्मक अखंडता को लागू करते समय आपकी जरूरत की हर चीज की अनुमति देता है, वह इस तरह दिख सकता है:
CREATE TABLE contact (
contact_id serial PRIMARY KEY
, name text
, phone text
, ...
);
CREATE TABLE product (
product_id serial PRIMARY KEY
, ...
);
CREATE TABLE product_role (
role_id int PRIMARY KEY
, role text UNIQUE
);
CREATE TABLE product_contact (
product_id int REFERENCES product
, contact_id int REFERENCES contact
, role_id int REFERENCES product_role
, PRIMARY KEY (product_id, contact_id, role_id)
);
अगर एक ही संपर्क कभी भी एक ही उत्पाद के लिए एक से अधिक भूमिकाओं में काम नहीं कर सकता है, तो PK में भूमिका शामिल न करें:
, PRIMARY KEY (product_id, contact_id)
यह केवल product_role
. में एक पंक्ति जोड़ने की अनुमति देता है अनुमति देने और अतिरिक्त प्रकार के संपर्क करने के लिए।
यदि अलग-अलग भूमिकाओं से भरा केवल एक हाथ है, तो डेटा प्रकार "char"
role_id
. के लिए सुविधाजनक हो सकता है ।
मूल बातें: