Files
2025-08-14 16:23:47 -05:00

2.1 KiB

erDiagram
    🌱Plant ||--o{ ↔️PlantGroup : "belongs to"
    🪴Group ||--o{ ↔️PlantGroup : "contains"

    🌱Plant }o--|| 🧬PlantSpecies : "is of"

    🫳Action ||--o{ 📒ActionLog : "logged in"
    🌱Plant ||--o{ 📒ActionLog : ""
    🪴Group ||--o{ 📒ActionLog : ""
    📋MaintenancePlan ||--o{ 📒ActionLog : "logged in"

    📋MaintenancePlan ||--o{ 🗓️MaintenancePlanAction : "has"
    🫳Action ||--o{ 🗓️MaintenancePlanAction : includes

    🔧Tool ||--o{ ⚙️ToolAction : ""
    🫳Action ||--o{ ⚙️ToolAction : ""

    🔧Tool ||--o{ 💾ToolAttributeValue : "has attribute with value"
    🏷️ToolAttribute ||--o{ 💾ToolAttributeValue : "has value"

    %% Entities
    🌱Plant {
        int id
        int species_id
        string name
        datetime date_acquired
    }

    🧬PlantSpecies {
        int id
        string name
        string genus
        string species
        string cultivar
        string variety
        string authority
    }

    🪴Group {
        int id
        string name
    }

    ↔️PlantGroup {
        int id
        int group_id
        int plant_id
    }

    🫳Action {
        int id
        string name
        string description
    }

    📒ActionLog {
        int id
        int action_id
        int plant_id
        int group_id
        int plan_id
        string notes
    }

    📋MaintenancePlan {
        int id
        int plant_id
        int group_id
        int maintenance_plan_action_id
    }

    🗓️MaintenancePlanAction {
        int id
        int maintenance_plan_id
        int action_id
        string schedule
    }

    🔧Tool {
        int id
        string name
        string description
    }

    ⚙️ToolAction {
        int id
        int tool_id
        int action_id
    }

    🏷️ToolAttribute {
        int id
        string name
        string description
    }

    💾ToolAttributeValue {
        int id
        int tool_attribute_id
        int tool_id
        string value_string
        float value_number
    }