Cet article partage principalement avec vous un article sur les problèmes de conception de la base de données MySQL. Il a une bonne valeur de référence et j'espère qu'il sera utile à tout le monde. Suivons l'éditeur pour y jeter un œil, j'espère que cela pourra aider tout le monde.
Description de la question : Il existe actuellement environ 100 000 éléments de données, enregistrant les employés d'un service. Sous la plupart des départements se trouve une structure hiérarchique avec de nombreux sous-départements. Par exemple, la partie A de premier niveau, les départements de deuxième niveau A', B', C', les départements de troisième niveau A", B", C". Comment concevoir une base de données ? Nous devons compter toutes les personnes sous la partie A' de deuxième niveau
Analyse :
Une conception de base de données hiérarchique est utilisée ici
CREATE TABLE DEPARTMENT( DEP_ID INT UNSIGNED AUTO_INCREMENT, DEP_NAME VARCHAR(10) NOT NULL, PARENT_ID INT, PRIMARY KEY(DEP_ID) )CHARSET=utf8;
Insérer des données
单个插入 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_id | dep_name | parent_id |
---|---|---|
1 | A | NULL |
2 | B | 1 |
3 | C | 1 |
4 | D | 2 |
5 | E | 2 |
6 | F | 3 |
7 | G | 3 |
Affichez la hiérarchie. La jointure gauche est utilisée ici. En fonction du dep_id
de ce niveau, recherchez son parent_id
, puis connectez-le via la jointure gauche pour obtenir le département actuel et son département parent. .>
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';
Créer le tableau et stocker les informations du personnel du département
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;
INSERT INTO people VALUES(1,'hgy',4,'D'),(2,'abc',5,'E'),(3,'def',6,'F'), (4,'ddd',2,'B'),(5,'eee',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';
select count(*) as total 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 | name | department_id | departname |
---|---|---|---|
1 | hgy | 4 | D |
2 | abc | 5 | E |
3 | def | 6 | F |
4 | ddd | 2 | B |
5 | eee | 2 | B |
Deuxième question : Statistiques simples
CREATE TABLE STUDENT( ID INT UNSIGNED AUTO_INCREMENT, SCORE1 INT NOT NULL, SCORE2 INT NOT NULL, SCORE3 INT NOT NULL, SCORE4 INT NOT NULL, PRIMARY KEY(ID) )CHARSET=utf8;
INSERT INTO STUDENT VALUES(1,100,98,10,4),(2,100,9,10,4),(3,70,0,180,40),(4,10,98,1,4),(5,30,7,10,4),(6,8,88,1,43);
.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!