ホームページ >データベース >mysql チュートリアル >MySQL データベース設計の問題の詳細な例

MySQL データベース設計の問題の詳細な例

零到壹度
零到壹度オリジナル
2018-03-30 13:41:172503ブラウズ

この記事は主に MySQL データベースの設計上の問題に関する記事を共有するものであり、非常に参考になるものです。編集者をフォローして見てみましょう。皆さんのお役に立てれば幸いです。

質問 1: 階層型データベース設計

質問の説明: 現在、ある部門の従業員を記録する約 100,000 個のデータがあります。ほとんどの部門の下には、多くのサブ部門からなる階層構造があります。たとえば、第 1 レベルのパート A、第 2 レベルの部門 A'、B'、C'、第 3 レベルの部門 A"、B"、C" です。データベースを設計する方法としては、すべてをカウントする必要があります。第 2 レベルのパート A' の下の人々。
分析: ここでは、階層型データベース設計が使用されています。

1

MySQL データベース設計の問題の詳細な例A

NULL34567
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 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);
副部門がBである人物を検索し、その上位部門の情報をリストします副部門がBである人の総数を見つけます
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 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';

MySQL データベース設計の問題の詳細な例id
dep_id,寻找它的parent_idname

部署IDMySQL データベース設計の問題の詳細な例
部署名

MySQL データベース設計の問題の詳細な例

1

显示MySQL データベース設計の問題の詳細な例hgy

4

MySQL データベース設計の問題の詳細な例D

23defdddeeeレベル部門(あるかもしれない)は 3 レベルの学科も 4 レベルの学科もありません)、ある人は 1 レベルの学科にいますが、一部の人は 4 レベルの学科にいます(1 レベルの学科、2 レベルの学科、3 レベルの学科があります) 、および第 4 レベルの学科) 2 番目の質問: 簡単な統計 タイトルの説明: 生徒のスコアをバッチ処理し、4 つの科目の合計スコアが 200 を超える生徒を見つけて、逆に並べ替えます。
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';
abc 5 E
6 F 4
2 B 5
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');
4科目の合計点に応じて並べ替えます 別名による並べ替えに関する知識のリストは次のとおりです。

以上がMySQL データベース設計の問題の詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。