面试题答案
一键面试数据库设计思路
- 文档结构:
- 每个流程对应一个文档。文档结构示例如下:
{ "_id": "流程唯一标识符", "name": "流程名称", "steps": [ "步骤1描述", "步骤2描述", // 更多步骤 ], "responsiblePerson": "负责人姓名" }
_id
是文档的唯一标识符,可以使用 UUID 等方式生成。name
存储流程的名称,steps
是一个数组,每个元素代表流程的一个步骤描述,responsiblePerson
存储该流程的负责人信息。
- 设计文档:
- 设计文档用于定义视图等功能。虽然本题没有特别强调视图需求,但如果之后有按负责人或流程名称查询等需求,可以创建相应视图。例如,为了按负责人查询流程,可以在设计文档中定义如下视图:
{ "_id": "_design/by_responsible_person", "views": { "by_responsible_person_view": { "map": "function(doc) { if (doc.responsiblePerson) { emit(doc.responsiblePerson, doc); } }" } } }
- 上述视图通过
map
函数将每个文档中responsiblePerson
作为键,整个文档作为值进行索引,方便后续按负责人查询流程。
使用 CouchDB API 进行数据插入操作
- 使用 HTTP API:
- CouchDB 使用 HTTP 协议进行交互。假设 CouchDB 运行在
http://localhost:5984
,数据库名为processes_db
。 - 要插入一个流程文档,首先创建一个符合上述文档结构的 JSON 数据,例如:
{ "name": "示例流程", "steps": [ "第一步", "第二步" ], "responsiblePerson": "张三" }
- 然后使用
POST
请求发送到http://localhost:5984/processes_db
。在命令行中可以使用curl
工具:
curl -X POST -H "Content-Type: application/json" -d '{"name":"示例流程","steps":["第一步","第二步"],"responsiblePerson":"张三"}' http://localhost:5984/processes_db
- CouchDB 会为文档自动生成
_id
和_rev
字段,并返回包含生成的_id
和_rev
的响应。
- CouchDB 使用 HTTP 协议进行交互。假设 CouchDB 运行在
- 使用客户端库:
- 不同编程语言有相应的 CouchDB 客户端库。例如在 Python 中可以使用
couchdb
库:
import couchdb # 连接到 CouchDB 服务器 couch = couchdb.Server('http://localhost:5984') db = couch['processes_db'] # 创建要插入的文档 doc = { "name": "示例流程", "steps": [ "第一步", "第二步" ], "responsiblePerson": "张三" } # 插入文档 db.save(doc)
- 上述 Python 代码通过
couchdb
库连接到 CouchDB 服务器,选择数据库后使用save
方法插入文档。同样,CouchDB 会自动生成_id
和_rev
字段。
- 不同编程语言有相应的 CouchDB 客户端库。例如在 Python 中可以使用