Bạn có thể cần xác định các chỉ mục xung quanh mối quan hệ bạn bè thay vì nhân đôi số lượng hàng:
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)
);
Bằng cách này, bạn tăng gấp đôi dung lượng lưu trữ cho các chỉ mục nhưng không phải cho dữ liệu bảng. Do đó, đây sẽ là một khoản tiết kiệm 25% trên không gian đĩa. Trình tối ưu hóa truy vấn MySQL sẽ chọn chỉ thực hiện quét phạm vi chỉ mục, đó là lý do tại sao khái niệm bao phủ các chỉ mục hoạt động tốt ở đây.
Dưới đây là một số liên kết đẹp về Chỉ số che phủ:
CẨN THẬN
Nếu tình bạn không có nhau, bạn có cơ sở cho một loại mối quan hệ khác: SAU
Nếu friend_to không phải là bạn của friend_of, bạn có thể bỏ mối quan hệ đó ra khỏi bàn.
Nếu bạn muốn xác định mối quan hệ cho tất cả các loại, cho dù chúng có tương hỗ hay không, bạn có thể sử dụng cách bố trí bảng sau:
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');
Từ bảng quan hệ, bạn có thể sắp xếp các mối quan hệ để bao gồm:
- Bạn bè nên tương thân
- Kẻ thù có thể là tương hỗ hoặc không
- Người theo dõi có thể tương hỗ hoặc không
- Các mối quan hệ khác sẽ chịu sự giải thích (bởi sự lãng quên hoặc bị bỏ rơi hoặc người nhận trả thù (đã sửa))
- Mối quan hệ có thể được mở rộng hơn nữa
Điều này nên mạnh mẽ hơn cho tất cả các mối quan hệ, cho dù mối quan hệ là tương hỗ hay không.