pg数据库,a表包含若干属性,属性之间是二级或三级菜单关联的关系,需要根据属性对a表记录的个数进行统计,怎么设计表方便
时间: 2025-09-03 20:21:47 AIGC 浏览: 5
### 表结构设计
为了便于在 PostgreSQL 数据库中根据二级或三级菜单关联关系的属性统计 `a` 表的记录个数,可以采用如下表设计:
#### 一级菜单表(`first_level_menu`)
```sql
CREATE TABLE first_level_menu (
first_menu_id SERIAL PRIMARY KEY,
first_menu_name VARCHAR(255) NOT NULL
);
```
#### 二级菜单表(`second_level_menu`)
```sql
CREATE TABLE second_level_menu (
second_menu_id SERIAL PRIMARY KEY,
second_menu_name VARCHAR(255) NOT NULL,
first_menu_id INT NOT NULL,
FOREIGN KEY (first_menu_id) REFERENCES first_level_menu(first_menu_id)
);
```
#### 三级菜单表(`third_level_menu`)
```sql
CREATE TABLE third_level_menu (
third_menu_id SERIAL PRIMARY KEY,
third_menu_name VARCHAR(255) NOT NULL,
second_menu_id INT NOT NULL,
FOREIGN KEY (second_menu_id) REFERENCES second_level_menu(second_menu_id)
);
```
#### `a` 表
```sql
CREATE TABLE a (
id SERIAL PRIMARY KEY,
-- 其他属性
third_menu_id INT NOT NULL,
FOREIGN KEY (third_menu_id) REFERENCES third_level_menu(third_menu_id)
);
```
### 统计示例
- 统计每个一级菜单下 `a` 表的记录个数:
```sql
SELECT
fm.first_menu_name,
COUNT(a.id) AS record_count
FROM
first_level_menu fm
JOIN
second_level_menu sm ON fm.first_menu_id = sm.first_menu_id
JOIN
third_level_menu tm ON sm.second_menu_id = tm.second_menu_id
JOIN
a ON tm.third_menu_id = a.third_menu_id
GROUP BY
fm.first_menu_name;
```
- 统计每个二级菜单下 `a` 表的记录个数:
```sql
SELECT
sm.second_menu_name,
COUNT(a.id) AS record_count
FROM
second_level_menu sm
JOIN
third_level_menu tm ON sm.second_menu_id = tm.second_menu_id
JOIN
a ON tm.third_menu_id = a.third_menu_id
GROUP BY
sm.second_menu_name;
```
- 统计每个三级菜单下 `a` 表的记录个数:
```sql
SELECT
tm.third_menu_name,
COUNT(a.id) AS record_count
FROM
third_level_menu tm
JOIN
a ON tm.third_menu_id = a.third_menu_id
GROUP BY
tm.third_menu_name;
```
阅读全文
相关推荐













