>  기사  >  데이터 베이스  >  MySQL 데이터베이스 설계 문제의 자세한 예

MySQL 데이터베이스 설계 문제의 자세한 예

零到壹度
零到壹度원래의
2018-03-30 13:41:172400검색

이 기사는 주로 MySQL 데이터베이스의 설계 문제에 대한 기사를 공유하며 좋은 참고 가치가 있으며 모든 사람에게 도움이 되기를 바랍니다. 편집자를 따라가서 모두에게 도움이 되기를 바랍니다.

질문 1: 계층적 데이터베이스 설계

질문 설명: 현재 한 부서의 직원을 기록하는 데이터가 약 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;

MySQL 데이터베이스 설계 문제의 자세한 예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_id1 2 34567
dep_name parent_id
A NULL
B 1
C 1
D 2
E 2
F 3
G 3

여기에서는 왼쪽 조인이 사용됩니다. 그때야 왼쪽 조인을 통해 연결하여 현재 부서와 상위 부서를 가져옵니다. MySQL 데이터베이스 설계 문제의 자세한 예

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

부서 수준 정보를 저장한 후 부서 직원 테이블을 디자인하기 시작합니다.

테이블을 생성하고 부서 직원 정보를 저장합니다MySQL 데이터베이스 설계 문제의 자세한 예

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인 사람을 찾아 그 사람의 상급 학과 정보를 나열하세요MySQL 데이터베이스 설계 문제의 자세한 예

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显示MySQL 데이터베이스 설계 문제의 자세한 예

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';

MySQL 데이터베이스 설계 문제의 자세한 예id

name인 총 인원수를 구하세요. department_idhgy45622 수준의 부서(어쩌면 거기에 3급 부서도 없고, 4급 부서도 없음), 1급 부서에 있는 사람도 있고, 4급 부서에 있는 사람도 있습니다(1급 부서, 2급 부서, 3급 부서가 있습니다). , 4급 학과) 두 번째 질문: 단순 통계
departname 1
D 2 abc
E 3 def
F 4 ddd
B 5 eee
B

제목 설명: 이제 학생들의 점수를 일괄 처리하여 4개 과목의 총점이 200점보다 큰 학생을 찾아 역순으로 정렬합니다. order.

위 내용은 MySQL 데이터베이스 설계 문제의 자세한 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.