이 기사는 주로 MySQL 데이터베이스의 설계 문제에 대한 기사를 공유하며 좋은 참고 가치가 있으며 모든 사람에게 도움이 되기를 바랍니다. 편집자를 따라가서 모두에게 도움이 되기를 바랍니다.
질문 설명: 현재 한 부서의 직원을 기록하는 데이터가 약 100,000개 있습니다. 대부분의 부서에는 많은 하위 부서가 있는 계층 구조가 있습니다. 예를 들어 첫 번째 수준의 부품 A, 두 번째 수준의 부서 A', B', C' 및 세 번째 수준의 부서 A", B", C"입니다. 데이터베이스를 설계하려면 모두 계산해야 합니다.
분석:
CREATE TABLE DEPARTMENT( DEP_ID INT UNSIGNED AUTO_INCREMENT, DEP_NAME VARCHAR(10) NOT NULL, PARENT_ID INT, PRIMARY KEY(DEP_ID) )CHARSET=utf8;
Insert data
单个插入 INSERT INTO DEPARTMENT (DEP_NAME, PARENT_ID) VALUES ('A',NULL); 或者批量插入 INSERT INTO department VALUES(1,'A',NULL),(2,'B',1),(3,'C',1), (4,'D',2),(5,'E',2),(6,'F',3),(7,'G',3);
dep_name | parent_id | |
---|---|---|
A | NULL | |
B | 1 | |
C | 1 | |
D | 2 | |
E | 2 | |
F | 3 | |
G | 3 |
여기에서는 왼쪽 조인이 사용됩니다. 그때야 왼쪽 조인을 통해 연결하여 현재 부서와 상위 부서를 가져옵니다.
select d1.dep_name as level1, d2.dep_name as level2, d3.dep_name as level3, d4.dep_name as level4 from department as d1 left join department as d2 on d2.parent_id = d1.dep_id left join department as d3 on d3.parent_id = d2.dep_id left join department as d4 on d4.parent_id = d3.dep_id where d1.dep_name='A';
dep_id
,寻找它的parent_id
부서 수준 정보를 저장한 후 부서 직원 테이블을 디자인하기 시작합니다. 테이블을 생성하고 부서 직원 정보를 저장합니다
create table people( id INT UNSIGNED AUTO_INCREMENT, name varchar(10) not null, dep_id INT UNSIGNED, departname varchar(10), FOREIGN KEY (dep_id) REFERENCES department(dep_id), primary key(id) )charset=utf8;
2차 학과가 B인 사람을 찾아 그 사람의 상급 학과 정보를 나열하세요
INSERT INTO people VALUES(1,'hgy',4,'D'),(2,'abc',5,'E'),(3,'def',6,'F'), (4,'ddd',2,'B'),(5,'eee',2,'B');
2차 학과가 B
select p.id, p.name, d1.dep_name as level1, d2.dep_name as level2, d3.dep_name as level3 from people as p left join department as d1 on d1.dep_id = p.dep_id left join department as d2 on d2.dep_id = d1.parent_id left join department as d3 on d3.dep_id = d2.parent_id where d1.dep_name='B' or d2.dep_name='B' or d3.dep_name='B';
id
departname | 1 | ||
---|---|---|---|
D | 2 | abc | |
E | 3 | def | |
F | 4 | ddd | |
B | 5 | eee | |
B | 수준의 부서(어쩌면 거기에 3급 부서도 없고, 4급 부서도 없음), 1급 부서에 있는 사람도 있고, 4급 부서에 있는 사람도 있습니다(1급 부서, 2급 부서, 3급 부서가 있습니다). , 4급 학과) |
제목 설명: 이제 학생들의 점수를 일괄 처리하여 4개 과목의 총점이 200점보다 큰 학생을 찾아 역순으로 정렬합니다. order.
위 내용은 MySQL 데이터베이스 설계 문제의 자세한 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!