आपको पंक्तियों की संख्या को दोगुना करने के बजाय दोस्ती के आसपास अनुक्रमित को परिभाषित करने की आवश्यकता हो सकती है:
CREATE TABLE person
(
person_id INT NOT NULL AUTO_INCREMENT,
...
PRIMARY KEY (person_id)
);
CREATE TABLE friendship
(
friend_of INT NOT NULL,
friend_to INT NOT NULL,
PRIMARY KEY (friend_of,friend_to),
UNIQUE KEY friend_to (friend_to,friend_of)
);
इस तरह, आप अनुक्रमित के लिए भंडारण को दोगुना करते हैं, लेकिन तालिका डेटा के लिए नहीं। नतीजतन, यह डिस्कस्पेस पर 25% की बचत होनी चाहिए। MySQL क्वेरी ऑप्टिमाइज़र केवल अनुक्रमणिका श्रेणी स्कैन का चयन करेगा, यही कारण है कि अनुक्रमणिका को कवर करने की अवधारणा यहाँ अच्छी तरह से काम करती है।
कवरिंग इंडेक्स पर कुछ अच्छे लिंक दिए गए हैं:
चेतावनी
यदि दोस्ती आपसी नहीं है, तो आपके पास दूसरे प्रकार के रिश्ते के लिए आधार है: FOLLOWER
अगर friend_to friend_of का मित्र नहीं है, तो आप बस उस रिश्ते को तालिका से बाहर कर सकते हैं।
यदि आप सभी प्रकार के संबंधों को परिभाषित करना चाहते हैं, चाहे वे पारस्परिक हों या न हों, आप संभवतः निम्न तालिका लेआउट का उपयोग कर सकते हैं:
CREATE TABLE person
(
person_id INT NOT NULL AUTO_INCREMENT,
...
PRIMARY KEY (person_id)
);
CREATE TABLE relationship
(
rel_id INT NOT NULL AUTO_INCREMENT,
person_id1 INT NOT NULL,
person_id2 INT NOT NULL,
reltype_id TINYINT,
PRIMARY KEY (rel_id),
UNIQUE KEY outer_affinity (reltype_id,person_id1,person_id2),
UNIQUE KEY inner_affinity (reltype_id,person_id2,person_id1),
KEY has_relationship_to (person1_id,reltype_id),
KEY has_relationship_by (person2_id,reltype_id)
);
CREATE TABLE relation
(
reltype_id TINYINT NOT NULL AUTO_INCREMENT,
rel_name VARCHAR(20),
PRIMARY KEY (reltype_id),
UNIQUE KEY (rel_name)
);
INSERT INTO relation (relation_name) VALUES
('friend'),('follower'),('foe'),
('forgotabout'),('forsaken'),('fixed');
संबंध तालिका से, आप निम्नलिखित को शामिल करने के लिए रिश्तों की व्यवस्था कर सकते हैं:
- दोस्तों आपसी मेलजोल होना चाहिए
- शत्रु परस्पर हो सकते हैं या नहीं
- अनुयायी परस्पर हो सकते हैं या नहीं
- अन्य रिश्ते व्याख्या के अधीन होंगे (भूल या भूल गए या बदला लेने वाले (निश्चित) के प्राप्तकर्ता)
- पोसिबी रिश्तों को और बढ़ाया जा सकता है
यह सभी रिश्तों के लिए अधिक मजबूत होना चाहिए, चाहे रिश्ता आपसी हो या न हो।