File size: 3,039 Bytes
daa9d8a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
当然,以下是完整的SQL语句,用于创建`api_names``api_keys`表,以及可选的`api_usage`表。这些表将支持存储API名称、API-KEY信息,并可选地记录API的使用情况。

### SQL 创建表的语句

```sql
-- 创建 users 表
DROP TABLE IF EXISTS "users";
CREATE TABLE "users" (
  "id" INTEGER PRIMARY KEY AUTOINCREMENT,
  "username" TEXT NOT NULL,
  "password" TEXT NOT NULL,
  "email" TEXT NOT NULL,
  "nikename" TEXT,
  "created_at" DATETIME DEFAULT CURRENT_TIMESTAMP,
  "updated_at" DATETIME DEFAULT CURRENT_TIMESTAMP,
  UNIQUE ("username" ASC),
  UNIQUE ("email" ASC)
);

-- 创建api_groups表
CREATE TABLE api_groups (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  group_name TEXT NOT NULL UNIQUE,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- 创建api_names表
CREATE TABLE api_names (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  api_name TEXT NOT NULL UNIQUE,
  api_group_id INTEGER,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (api_group_id) REFERENCES api_groups(id) ON DELETE SET NULL
);

-- 创建api_keys表
CREATE TABLE api_keys (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  api_group_id INTEGER NOT NULL,
  api_key TEXT NOT NULL,
  category TEXT NOT NULL,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (api_group_id) REFERENCES api_groups(id) ON DELETE CASCADE
);

-- 创建user_api_keys表
CREATE TABLE user_api_keys (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  user_api_key TEXT NOT NULL,
  user_id INTEGER,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- 创建api_usage表(如果需要)
CREATE TABLE api_usage (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  user_api_key_id INTEGER,
  api_key_id INTEGER,
  request_count INTEGER DEFAULT 0,
  last_used DATETIME DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (user_api_key_id) REFERENCES user_api_keys(id),
  FOREIGN KEY (api_key_id) REFERENCES api_keys(id)
);
```

### 说明

- **`api_names` 表**:存储唯一的API名称。
- **`api_keys` 表**:存储每个API名称对应的多个API-KEY,包括分类信息。`api_names_id`作为外键,关联到`api_names`表。
- **`user_api_keys` 表**:存储用户的API-KEY。
- **`api_usage` 表**(可选):记录API的使用情况,包括请求次数和最后使用时间。这个表可以用来监控API的使用情况,帮助管理API-KEY的使用限额。

这些SQL语句假设你使用的是MySQL数据库。如果你使用的是其他类型的数据库(如PostgreSQL、SQLite等),可能需要对SQL语句进行适当的调整。如果有任何问题或需要进一步的帮助,请随时告诉我。



### 通过 api_name 查询 api_key 的 SQL 语句
```sql
SELECT ak.api_key
FROM api_keys ak
JOIN api_groups ag ON ak.api_group_id = ag.id
JOIN api_names an ON an.api_group_id = ag.id
WHERE an.api_name = 'your_api_name';
```