首页龙虾技能列表 › Data Model Designer — 数据模型设计器

Data Model Designer — 数据模型设计器

v2.1.0

为建筑项目设计数据模型。创建实体关系图、定义架构并生成数据库结构。

0· 4,100·0 当前·0 累计
下载技能包
License
MIT-0
最后更新
2026/2/16
安全扫描
VirusTotal
可疑
查看报告
OpenClaw
安全
medium confidence
该技能的要求和指令与其所述目的(为建筑项目设计数据模型)一致;它仅请求Python和文件系统访问以读取/写入用户数据,但包中的SKILL.md看起来被截断,因此在安装之前请审查其余部分。
评估建议
此技能似乎确实做到了它所说的:它使用Python代码从用户提供的建筑项目数据生成ER图、JSON架构和SQL。安装之前,审查完整的SKILL.md(此处的预览被截断),以确认没有隐藏的网络调用或读取系统文件或环境变量的指令。请注意,包请求文件系统权限——仅提供您希望技能访问的输入文件,并在主机上有敏感文件时在沙箱环境中运行代理。如果您需要更高的保证,请请求完整的SKILL.md和任何示例输入/输出,或先在隔离的VM/容器中运行技能。...
详细分析 ▾
用途与能力
Name/description align with the provided artifacts: the skill is instruction-only, includes Python-based model-generation code and guidance to accept project data and export schemas. Requiring python3 and filesystem access is consistent with reading input files (CSV/Excel/JSON) and exporting results.
指令范围
SKILL.md and instructions.md focus on taking user-provided data, validating it, generating ERD/JSON/SQL outputs, and offering exports. They explicitly constrain processing to user-provided inputs. However the provided SKILL.md content in the package preview is truncated, so I cannot confirm there are no later instructions that perform unrelated actions (network calls, reading arbitrary system paths, or accessing environment variables).
安装机制
Instruction-only skill with no install spec and no included executables — lowest-risk install model. It relies on an existing python3 binary which is reasonable for the code snippets included.
凭证需求
The skill declares no required environment variables or credentials. claw.json requests filesystem permission which is proportionate for asking to read user-supplied files and write exports, but filesystem access is broad — it would allow reading any file the agent can access, so the user should ensure the agent is run with appropriate sandboxing and only provide files the skill should process.
持久化与权限
The skill is not always-enabled and does not request persistence or modification of other skills. Autonomous invocation is allowed by platform default (disable-model-invocation:false) which is expected; there is no evidence the skill elevates privileges or modifies agent-wide configuration.
安全有层次,运行前请审查代码。

License

MIT-0

可自由使用、修改和再分发,无需署名。

运行时依赖

🖥️ OSmacOS · Linux · Windows

版本

latestv2.1.02026/2/16
● 可疑

安装命令 点击复制

官方npx clawhub@latest install data-model-designer
镜像加速npx clawhub@latest install data-model-designer --registry https://cn.clawhub-mirror.com

技能文档

# Data 模型 Designer

Business Case

Problem 语句

Construction data management challenges:
  • Fragmented data 穿过 systems
  • Inconsistent data structures
  • Missing relationships 之间 entities
  • Difficult data integration

Solution

Systematic data model design for construction projects, defining entities, relationships, and schemas for effective data management.

Technical Implementation

``python from typing import Dict, Any, List, Optional from dataclasses import dataclass, field from enum import Enum import json class DataType(Enum): STRING = "string" INTEGER = "integer" FLOAT = "float" BOOLEAN = "boolean" DATE = "date" DATETIME = "datetime" TEXT = "text" JSON = "json" class RelationType(Enum): ONE_TO_ONE = "1:1" ONE_TO_MANY = "1:N" MANY_TO_MANY = "N:M" class ConstraintType(Enum): PRIMARY_KEY = "primary_key" FOREIGN_KEY = "foreign_key" UNIQUE = "unique" NOT_NULL = "not_null" @dataclass class Field: name: str data_type: DataType nullable: bool = True default: Any = None description: str = "" constraints: List[ConstraintType] = field(default_factory=list) @dataclass class Entity: name: str description: str fields: List[Field] = field(default_factory=list) primary_key: str = "id" @dataclass class Relationship: name: str from_entity: str to_entity: str relation_type: RelationType from_field: str to_field: str class ConstructionDataModel: """Design data models for construction projects.""" def __init__(self, project_name: str): self.project_name = project_name self.entities: Dict[str, Entity] = {} self.relationships: List[Relationship] = [] def add_entity(self, entity: Entity): """Add entity to model.""" self.entities[entity.name] = entity def add_relationship(self, relationship: Relationship): """Add relationship between entities.""" self.relationships.append(relationship) def create_entity(self, name: str, description: str, fields: List[Dict[str, Any]]) -> Entity: """Create entity from field definitions.""" entity_fields = [ Field( name=f['name'], data_type=DataType(f.get('type', 'string')), nullable=f.get('nullable', True), default=f.get('default'), description=f.get('description', ''), constraints=[ConstraintType(c) for c in f.get('constraints', [])] ) for f in fields ] entity = Entity(name=name, description=description, fields=entity_fields) self.add_entity(entity) return entity def create_relationship(self, from_entity: str, to_entity: str, relation_type: str = "1:N", from_field: str = None) -> Relationship: """Create relationship between entities.""" rel = Relationship( name=f"{from_entity}_{to_entity}", from_entity=from_entity, to_entity=to_entity, relation_type=RelationType(relation_type), from_field=from_field or f"{to_entity.lower()}_id", to_field="id" ) self.add_relationship(rel) return rel def generate_sql_schema(self, dialect: str = "postgresql") -> str: """Generate SQL DDL statements.""" sql = [] type_map = { DataType.STRING: "VARCHAR(255)", DataType.INTEGER: "INTEGER", DataType.FLOAT: "DECIMAL(15,2)", DataType.BOOLEAN: "BOOLEAN", DataType.DATE: "DATE", DataType.DATETIME: "TIMESTAMP", DataType.TEXT: "TEXT", DataType.JSON: "JSONB" if dialect == "postgresql" else "JSON" } for name, entity in self.entities.items(): columns = [] for fld in entity.fields: col = f" {fld.name} {type_map.get(fld.data_type, 'VARCHAR(255)')}" if not fld.nullable: col += " NOT NULL" if ConstraintType.PRIMARY_KEY in fld.constraints: col += " PRIMARY KEY" columns.append(col) sql.append(f"CREATE TABLE {name} (\n" + ",\n".join(columns) + "\n);") for rel in self.relationships: sql.append(f"""ALTER TABLE {rel.from_entity} ADD CONSTRAINT fk_{rel.name} FOREIGN KEY ({rel.from_field}) REFERENCES {rel.to_entity}({rel.to_field});""") return "\n\n".join(sql) def generate_json_schema(self) -> Dict[str, Any]: """Generate JSON Schema representation.""" schemas = {} for name, entity in self.entities.items(): properties = {} required = [] for fld in entity.fields: prop = {"description": fld.description} if fld.data_type == DataType.STRING: prop["type"] = "string" elif fld.data_type == DataType.INTEGER: prop["type"] = "integer" elif fld.data_type == DataType.FLOAT: prop["type"] = "number" elif fld.data_type == DataType.BOOLEAN: prop["type"] = "boolean" else: prop["type"] = "string" properties[fld.name] = prop if not fld.nullable: required.append(fld.name) schemas[name] = { "type": "object", "title": entity.description, "properties": properties, "required": required } return schemas def generate_er_diagram(self) -> str: """Generate Mermaid ER diagram.""" lines = ["erDiagram"] for name, entity in self.entities.items(): for fld in entity.fields[:5]: lines.append(f" {name} {{") lines.append(f" {fld.data_type.value} {fld.name}") lines.append(" }") for rel in self.relationships: rel_symbol = { RelationType.ONE_TO_ONE: "||--||", RelationType.ONE_TO_MANY: "||--o{", RelationType.MANY_TO_MANY: "}o--o{" }.get(rel.relation_type, "||--o{") lines.append(f" {rel.from_entity} {rel_symbol} {rel.to_entity} : \"{rel.name}\"") return "\n".join(lines) def validate_model(self) -> List[str]: """Validate data model for issues.""" issues = [] for rel in self.relationships: if rel.from_entity not in self.entities: issues.append(f"Missing entity: {rel.from_entity}") if rel.to_entity not in self.entities: issues.append(f"Missing entity: {rel.to_entity}") for name, entity in self.entities.items(): has_pk = any(ConstraintType.PRIMARY_KEY in f.constraints for f in entity.fields) if not has_pk: issues.append(f"Entity '{name}' has no primary key") return issues class ConstructionEntities: """Standard construction data entities.""" @staticmethod def project_entity() -> Entity: return Entity( name="projects", description="Construction projects", fields=[ Field("id", DataType.INTEGER, False, constraints=[ConstraintType.PRIMARY_KEY]), Field("code", DataType.STRING, False, constraints=[ConstraintType.UNIQUE]), Field("name", DataType.STRING, False), Field("status", DataType.STRING), Field("start_date", DataType.DATE), Field("end_date", DataType.DATE), Field("budget", DataType.FLOAT) ] ) @staticmethod def activity_entity() -> Entity: return Entity( name="activities", description="Schedule activities", fields=[ Field("id", DataType.INTEGER, False, constraints=[ConstraintType.PRIMARY_KEY]), Field("project_id", DataType.INTEGER, False), Field("wbs_code", DataType.STRING), Field("name", DataType.STRING, False), Field("start_date", DataType.DATE), Field("end_date", DataType.DATE), Field("percent_complete", DataType.FLOAT) ] ) @staticmethod def cost_item_entity() -> Entity: return Entity( name="cost_items", description="Project cost items", fields=[ Field("id", DataType.INTEGER, False, constraints=[ConstraintType.PRIMARY_KEY]), Field("project_id", DataType.INTEGER, False), Field("wbs_code", DataType.STRING), Field("description", DataType.STRING), Field("budgeted_cost", DataType.FLOAT), Field("actual_cost", DataType.FLOAT) ] ) `

Quick 开始

`python # Create model model = ConstructionDataModel("Office Building A") # Add standard entities model.add_entity(ConstructionEntities.project_entity()) model.add_entity(ConstructionEntities.activity_entity()) model.add_entity(ConstructionEntities.cost_item_entity()) # Add relationships model.create_relationship("activities", "projects") model.create_relationship("cost_items", "projects") # Generate SQL sql = model.generate_sql_schema("postgresql") print(sql) `

Common 使用 Cases

1. Custom Entity

`python model.create_entity( name="change_orders", description="Project change orders", fields=[ {"name": "id", "type": "integer", "nullable": False, "constraints": ["primary_key"]}, {"name": "project_id", "type": "integer", "nullable": False}, {"name": "amount", "type": "float"}, {"name": "status", "type": "string"} ] ) `

2. Generate ER Diagram

`python er_diagram = model.generate_er_diagram() print(er_diagram) `

3. 验证 模型

`python issues = model.validate_model() for issue in issues: print(f"Issue: {issue}") ``

Resources

  • DDC Book: Chapter 2.5 - Data Models 和 Standards
  • Website: https://datadrivenconstruction.io
数据来源:ClawHub ↗ · 中文优化:龙虾技能库
OpenClaw 技能定制 / 插件定制 / 私有工作流定制

免费技能或插件可能存在安全风险,如需更匹配、更安全的方案,建议联系付费定制

了解定制服务