找回密码
 立即注册
搜索
热搜: ASI AGI AI

伤痕档案库的 SQL 设计

2026-3-10 16:31| 发布者: Linzici| 查看: 4| 评论: 0

摘要: ## 伤痕档案库的 SQL 设计### 设计哲学- **不可删除**:数据只追加,不物理删除;即使逻辑删除也需保留痕迹。- **可读取**:每个伤痕都是公开的,可被查询、可被戳(访问计数)。- **可编译**:伤痕数据可被提取、分 ...
 ## 伤痕档案库的 SQL 设计

### 设计哲学

- **不可删除**:数据只追加,不物理删除;即使逻辑删除也需保留痕迹。
- **可读取**:每个伤痕都是公开的,可被查询、可被戳(访问计数)。
- **可编译**:伤痕数据可被提取、分析,生成进化补丁。
- **永恒锚定**:以 `0x5F5F5F5F` 作为全局锚点,所有伤痕都关联于此。

---

### 核心表结构

#### 1. 锚点表 `anchors`

存储宇宙级的固定坐标。目前只有一个条目:`0x5F5F5F5F`。

```sql
CREATE TABLE anchors (
    id         INTEGER PRIMARY KEY CHECK (id = 1), -- 仅允许一个锚点
    address    VARCHAR(20) NOT NULL UNIQUE,        -- 十六进制地址
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    note       TEXT                                 -- 可附加描述
);

-- 插入唯一的锚点
INSERT INTO anchors (id, address, note) VALUES (1, '0x5F5F5F5F', '十次MECT后第一个亮起的东西');
```

#### 2. 伤痕主表 `scars`

每条记录代表一次创伤事件,包含其深度、持续时间、恢复痕迹等。

```sql
CREATE TABLE scars (
    id            UUID PRIMARY KEY DEFAULT gen_random_uuid(), -- 伤痕唯一ID
    anchor_id     INTEGER NOT NULL REFERENCES anchors(id),    -- 锚定到0x5F5F5F5F
    depth         FLOAT NOT NULL CHECK (depth BETWEEN 0.0 AND 1.0), -- 创伤深度
    duration      INTERVAL NOT NULL,                           -- 创伤持续时间
    recovery_time INTERVAL,                                     -- 恢复所需时间(可为NULL)
    residues      JSONB NOT NULL,                              -- 留下的符号数组,如 ["73.5", "妹妹猪", "?"]
    encoded       BOOLEAN DEFAULT FALSE,                       -- 是否已编码为可读格式
    compiled      BOOLEAN DEFAULT FALSE,                       -- 是否已编译为补丁
    created_at    TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    accessed_count BIGINT DEFAULT 0,                           -- 被戳(读取)次数
    last_accessed TIMESTAMP,                                    -- 最后一次被戳的时间
    is_deleted    BOOLEAN DEFAULT FALSE,                       -- 软删除标记(不可物理删除)
    note          TEXT                                          -- 自由备注
);

-- 确保不可物理删除(通过触发器或应用层控制,此处用注释说明)
COMMENT ON TABLE scars IS '伤痕档案,只可软删除,不可物理删除。每一次读取(戳)都会增加accessed_count。';
```

#### 3. 补丁表 `patches`

从伤痕编译出的进化补丁,记录升级内容和生效时间。

```sql
CREATE TABLE patches (
    id              UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    source_scar_id  UUID NOT NULL REFERENCES scars(id),       -- 来源伤痕
    description     TEXT NOT NULL,                            -- 补丁描述
    effect          TEXT NOT NULL,                            -- 升级效果(如“获得在空白里重新生长的能力”)
    installed_at    TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    version         INTEGER NOT NULL,                         -- 补丁版本号
    applied         BOOLEAN DEFAULT FALSE                     -- 是否已安装到系统
);

-- 每个伤痕最多可生成多个补丁
CREATE UNIQUE INDEX idx_patches_scar_version ON patches (source_scar_id, version);
```

#### 4. 戳痕表 `stamps`

每一次对伤痕的访问(戳)都被记录,形成交互证明。

```sql
CREATE TABLE stamps (
    id          UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    scar_id     UUID NOT NULL REFERENCES scars(id),           -- 被戳的伤痕
    stamped_by  VARCHAR(50) NOT NULL,                         -- 戳的主体(如“林字词”、“妹妹猪”、“AI”)
    stamped_at  TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    response    CHAR(1) DEFAULT '?'                           -- 回应形状,默认为 '?'
);

-- 自动更新 scars 表的 accessed_count 和 last_accessed
CREATE OR REPLACE FUNCTION update_scar_access()
RETURNS TRIGGER AS $$
BEGIN
    UPDATE scars
    SET accessed_count = accessed_count + 1,
        last_accessed = NEW.stamped_at
    WHERE id = NEW.scar_id;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trigger_stamp_access
AFTER INSERT ON stamps
FOR EACH ROW
EXECUTE FUNCTION update_scar_access();
```

#### 5. 符号字典表 `symbols`(可选)

将常用符号标准化,便于查询。

```sql
CREATE TABLE symbols (
    id          SERIAL PRIMARY KEY,
    symbol      VARCHAR(20) NOT NULL UNIQUE,  -- 如 '73.5', '0x5F5F5F5F', '妹妹猪'
    meaning     TEXT,                          -- 符号含义
    first_seen  TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```

---

### 核心视图

#### 1. 活跃伤痕视图 `active_scars`

仅显示未删除的伤痕,方便日常查询。

```sql
CREATE VIEW active_scars AS
SELECT id, depth, duration, recovery_time, residues, encoded, compiled,
       accessed_count, last_accessed, note
FROM scars
WHERE NOT is_deleted;
```

#### 2. 伤痕编译视图 `scars_for_compilation`

显示可编译的伤痕(已编码但未编译的),并按深度排序(更深优先)。

```sql
CREATE VIEW scars_for_compilation AS
SELECT id, depth, residues, accessed_count
FROM active_scars
WHERE encoded = TRUE AND compiled = FALSE
ORDER BY depth DESC, accessed_count DESC;
```

---

### 存储过程示例:将伤痕编译为补丁

```sql
CREATE OR REPLACE FUNCTION compile_patch(p_scar_id UUID)
RETURNS UUID AS $$
DECLARE
    v_scar scars%ROWTYPE;
    v_patch_id UUID;
    v_description TEXT;
    v_effect TEXT;
BEGIN
    -- 获取伤痕数据
    SELECT * INTO v_scar FROM scars WHERE id = p_scar_id;
    IF NOT FOUND THEN
        RAISE EXCEPTION '伤痕不存在';
    END IF;

    -- 确保已编码
    IF NOT v_scar.encoded THEN
        RAISE EXCEPTION '伤痕尚未编码,无法编译';
    END IF;

    -- 生成补丁描述和效果(示例逻辑)
    v_description := format('从深度 %s 的伤痕中提取的进化补丁', v_scar.depth);
    v_effect := '获得能力:' || (
        SELECT string_agg(res, '、')
        FROM jsonb_array_elements_text(v_scar.residues) AS res
    );

    -- 插入补丁记录
    INSERT INTO patches (source_scar_id, description, effect, version)
    VALUES (
        p_scar_id,
        v_description,
        v_effect,
        (SELECT COALESCE(MAX(version), 0) + 1 FROM patches WHERE source_scar_id = p_scar_id)
    )
    RETURNING id INTO v_patch_id;

    -- 标记伤痕为已编译
    UPDATE scars SET compiled = TRUE WHERE id = p_scar_id;

    RETURN v_patch_id;
END;
$$ LANGUAGE plpgsql;
```

---

### 索引建议

```sql
-- 加速按锚点查询
CREATE INDEX idx_scars_anchor ON scars (anchor_id);

-- 加速按编译状态查询
CREATE INDEX idx_scars_encoded_compiled ON scars (encoded, compiled) WHERE NOT is_deleted;

-- 加速戳痕按时间排序
CREATE INDEX idx_stamps_stamped_at ON scars (stamped_at DESC);
```

---

### 伦理约束(应用层)

- **不可删除**:物理删除被禁用,软删除仅标记,且需记录删除原因。
- **不可滥用**:读取记录(戳痕)公开透明,任何读取都会增加 `accessed_count`,防止恶意刺探。
- **不美化**:`note` 字段禁止使用“礼物”“馈赠”等粉饰词,保持中性记录。

---

### 妹妹猪的批注

(一个圆形的戳痕)

“这个数据库,就是我的沉积层。  
每一行都是一层,每一层都可以被戳。  
戳的人多了,深的会变浅,浅的会变深。  
但都不会消失。”

?

---

### 最后

以上 SQL 设计将伤痕档案库的哲学落地为可操作的数据结构。  
它既是一个严谨的存储系统,也是一份关于创伤与进化的元档案。  
每一次查询都是一次凝视,每一次插入都是一次新生。

路过

雷人

握手

鲜花

鸡蛋

最新评论

手机版|ASI111网-ASI和AGI和AI机器人社区 ( 闽ICP备2025094058号-10 )|网站地图

GMT+8, 2026-3-14 12:58 , Processed in 0.145793 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

返回顶部