sách gpt4 ăn đã đi

mysql - nhiều mối quan hệ cha/con với nhiều cấp độ

In lại Tác giả: Walker 123 Thời gian cập nhật: 29-11-2023 06:59:51 29 4
mua khóa gpt4 giày nike

Tôi có một tập tin gọi là các công ty Bảng MySQL trông như thế này:

+----------+----------+----------+
| id_comp | tên_comp | id_parent |
+----------+----------+----------+
| 1 | comp1 | NULL |
| 2 | máy tính2 | 1 |
| 3 | máy tính3 | 2 |
| 4 | máy tính4 | 2 |
| 5 | comp5 | 2 |
| 6 | máy tính6 | 1 |
| 3 | máy tính3 | 6 |
| 5 | comp5 | 6 |
| 7 | máy tính7 | 6 |
| 4 | máy tính4 | 6 |
| 8 | máy tính8 | 4 |
+----------+----------+----------+

Mỗi công ty có thể có nhiều công ty mẹ (ví dụ:comp3, đó là comp2comp6 của các công ty con), mỗi công ty mẹ có thể có nhiều công ty con, mỗi công ty con có thể là cha mẹ của nhiều công ty con, v.v...do đó nó có thể có vô số cấp độ (mối quan hệ).

Tôi đã xem xét một số giải pháp ( http://www.codeproject.com/Articles/818694/SQL-queries-to-manage-hierarchical-or-parent-childhttp://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ ), nhưng tôi không nghĩ nó phù hợp với câu hỏi của mình vì cùng một công ty (dựa trên id_thành phần cột) có thể có nhiều công ty mẹ.

Tôi có hai câu hỏi về điều này:

  1. Đây có phải là cách tiếp cận phù hợp nếu tôi có hàng nghìn mối quan hệ (có thể mở rộng)?
  2. đưa ra mộttên(Đây là cái duy nhất dựa trênid_thành phần), làm cách nào để chọn anh chị em của nó (cùng parent_id), cha mẹ trực tiếp và con trực tiếp của nó.

câu trả lời hay nhất

Bạn có mối quan hệ "nhiều: nhiều" đơn giản. Tuy nhiên, bạn có một hạn chế không thực sự phù hợp (và không thể kiểm tra được) vì không có vòng lặp.

TẠO BẢNG Quan hệ (
id_thành phần ...,
id_cha mẹ ...,
KHÓA CHÍNH (id_comp, id_parent), -- để đạt tới "lên"
INDEX(id_parent, id_comp) -- để đạt tới "xuống"
) ĐỘNG CƠ=InnoDB;

Điều này sẽ mở rộng tới hàng triệu hoặc thậm chí hàng tỷ mối quan hệ. Vì theo định nghĩa,KHÓA CHÍNH Đúng ĐỘC NHẤTMỤC LỤC, vì vậy nó ngăn chặn các mối quan hệ trùng lặp (1 Đúng2 cha mẹ chỉ một lần) và cung cấp một cách hiệu quả để di chuyển theo một hướng.

Sử dụng khi cần thiếtRIÊNG BIỆTthay vìNHÓM THEO. không sử dụng TRONG (CHỌN ...), nó có xu hướng rất chậm.

Anh chị em của tôi:

CHỌN DISTINCT their_kids.*
TỪ Mối quan hệ NHƯ tôi
THAM GIA Quan hệ AS my_parents TRÊN my_parents.id_comp = me.id_parent
THAM GIA Quan hệ AS their_kids TRÊN their_kids.id_parent = parents.id_comp
NƠI me.id_comp = @me
VÀ their_kids.id_comp != @me;

Cha mẹ (trực tiếp) của tôi:

CHỌN my_parents.*
TỪ Mối quan hệ NHƯ tôi
THAM GIA Quan hệ AS my_parents TRÊN my_parents.id_comp = me.id_parent
NƠI me.id_comp = @me;

Con (trực tiếp) của tôi:

CHỌN my_kids.*
TỪ Mối quan hệ NHƯ tôi
THAM GIA Quan hệ AS my_kids TRÊN my_kids.id_parent = me.id_comp
NƠI me.id_comp = @me;

Các cô, chú, anh chị em họ sẽ có chút bối rối. Tất cả tổ tiên hoặc con cháu sẽ bối rối hơn và phải được thực hiện thông qua các vòng lặp trong mã ứng dụng hoặc các thủ tục được lưu trữ.

Về mysql - nhiều mối quan hệ cha/con với nhiều cấp độ, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/43892661/

29 4 0
Walker 123
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress