浏览代码

fit:new schema docs

悦 陈 1 月之前
父节点
当前提交
6180a080dd
共有 5 个文件被更改,包括 372 次插入2 次删除
  1. 3 0
      .vscode/settings.json
  2. 104 0
      docs/info-map.md
  3. 263 0
      docs/schema.md
  4. 2 1
      myapp/.vscode/settings.json
  5. 0 1
      myapp/src/app/tab1/neighborhood/neighborhood.page.ts

+ 3 - 0
.vscode/settings.json

@@ -0,0 +1,3 @@
+{
+     "plantuml.server":"http://www.plantuml.com/plantuml"
+}

+ 104 - 0
docs/info-map.md

@@ -0,0 +1,104 @@
+# AI鸟类数据库结构
+
+## Region(地区表)
+- **基础字段**
+  - objectId
+  - createdAt
+  - updatedAt
+- **信息字段**
+  - name: String
+  - description: String
+  - climate: String
+  - terrain: String
+  - areaSize: Number
+  - bestSeason: String
+- **地理信息**
+  - featureTags: Array<String>
+  - centerLocation: GeoPoint
+  - mapImage: File
+- **统计字段**
+  - popularity: Number
+
+## Bird(鸟类表)
+- **基础字段**
+  - objectId
+  - createdAt
+  - updatedAt
+- **分类信息**
+  - name: String
+  - scientificName: String
+  - family: String
+- **特征描述**
+  - description: String
+  - habitats: Array<String>
+  - size: String
+  - color: String
+- **生态信息**
+  - conservationStatus: String
+  - seasons: Array<String>
+  - diet: String
+- **媒体**
+  - image: File
+
+## BirdRoute(观鸟路线表)
+- **基础字段**
+  - objectId
+  - createdAt
+  - updatedAt
+- **基本信息**
+  - name: String
+  - description: String
+  - region: Pointer<Region>
+- **路线特征**
+  - length: Number
+  - difficulty: Number
+  - estimatedTime: Number
+  - pathPoints: Array<GeoPoint>
+- **观鸟信息**
+  - commonBirds: Array<Pointer<Bird>>
+  - bestMonths: Array<String>
+- **位置信息**
+  - startPoint: String
+  - endPoint: String
+- **评价信息**
+  - rating: Number
+  - popularity: Number
+- **设施**
+  - facilities: Array<String>
+- **媒体**
+  - routeImage: File
+
+## UserObservation(用户观察记录)
+- **关联信息**
+  - user: Pointer<User>
+  - bird: Pointer<Bird>
+  - route: Pointer<BirdRoute>
+- **观察数据**
+  - observationTime: Date
+  - location: GeoPoint
+  - weather: String
+  - notes: String
+  - confidence: Number
+- **媒体**
+  - photo: File
+
+## RouteReview(路线评价表)
+- **关联信息**
+  - user: Pointer<User>
+  - route: Pointer<BirdRoute>
+- **评价内容**
+  - rating: Number
+  - comment: String
+  - tags: Array<String>
+- **观察数据**
+  - visitDate: Date
+  - birdsSeen: Array<Pointer<Bird>>
+
+## 关系图
+```mermaid
+graph TD
+  Region -->|contains| BirdRoute
+  BirdRoute -->|has| UserObservation
+  BirdRoute -->|has| RouteReview
+  Bird -->|observed| UserObservation
+  Bird -.->|found_in| BirdRoute

+ 263 - 0
docs/schema.md

@@ -0,0 +1,263 @@
+# AI鸟类
+
+# 数据范式设计
+> 设定要求
+您是一名专业的数据库工程师,熟悉PostgreSQL和ParseServer
+请注意表名用大驼峰,字段用小驼峰。
+有预留字段:objectId、updateAt、createAt
+关于ParseServer中数据类的描述,字段的主要类型有
+String => String
+Number => Number
+Bool => bool
+Array => JSON Array
+Object => JSON Object
+Date => Date
+File => Parse.File
+Pointer => other Parse.Object
+Relation => Parse.Relation
+Null => null
+GeoPoint => {latitude:40.0,longitude:-30.0}
+
+> 项目需求
+观鸟路线推荐的辅助AI应用,地区、路线信息、鸟类信息,请您根据徒步出游以及观鸟的行业经验,设计以上三张表,你也可以适当增加合理的表
+
+> 输出结果(UML类图)
+请您帮我用plantuml的类图描述设计好的几张表及其关系
+
+> 输出结果(信息结构图)
+请您帮我用markmap格式表示上面的信息结构图
+
+> 输出结果(SQL语句)
+请您帮我用sql格式给我建表语句和测试数据插入语句,注意字段请使用小驼峰用""引起来
+
+# UML类图
+```plantuml
+@startuml AIBirdDatabaseSchema
+
+class Region {
+  +String objectId
+  +Date createdAt
+  +Date updatedAt
+  
+  +String name
+  +String description
+  +String climate
+  +String terrain
+  +Number areaSize
+  +String bestSeason
+  +Array<String> featureTags
+  +GeoPoint centerLocation
+  +File mapImage
+  +Number popularity
+}
+
+class Bird {
+  +String objectId
+  +Date createdAt
+  +Date updatedAt
+  
+  +String name
+  +String scientificName
+  +String family
+  +String description
+  +Array<String> habitats
+  +String conservationStatus
+  +Array<String> seasons
+  +File image
+  +String size
+  +String color
+  +String diet
+}
+
+class BirdRoute {
+  +String objectId
+  +Date createdAt
+  +Date updatedAt
+  
+  +String name
+  +String description
+  +Pointer<Region> region
+  +Number length
+  +Number difficulty
+  +Number estimatedTime
+  +Array<GeoPoint> pathPoints
+  +Array<Pointer<Bird>> commonBirds
+  +Array<String> bestMonths
+  +String startPoint
+  +String endPoint
+  +Number rating
+  +Array<String> facilities
+  +File routeImage
+  +Number popularity
+}
+
+class UserObservation {
+  +String objectId
+  +Date createdAt
+  +Date updatedAt
+  
+  +Pointer<User> user
+  +Pointer<Bird> bird
+  +Pointer<BirdRoute> route
+  +Date observationTime
+  +GeoPoint location
+  +String weather
+  +String notes
+  +File photo
+  +Number confidence
+}
+
+class RouteReview {
+  +String objectId
+  +Date createdAt
+  +Date updatedAt
+  
+  +Pointer<User> user
+  +Pointer<BirdRoute> route
+  +Number rating
+  +String comment
+  +Array<String> tags
+  +Date visitDate
+  +Array<Pointer<Bird>> birdsSeen
+}
+
+Region "1" -- "*" BirdRoute : contains
+BirdRoute "1" -- "*" UserObservation : has
+BirdRoute "1" -- "*" RouteReview : has
+Bird "1" -- "*" UserObservation : observed
+Bird "n" -- "m" BirdRoute : found_in
+
+@enduml
+```
+Region(地区表):存储观鸟地区的基本信息,包括地理特征、最佳季节等
+Bird(鸟类表):记录各种鸟类的详细信息,包括学名、栖息地、保护状态等
+BirdRoute(观鸟路线表):存储推荐的观鸟路线信息,与地区和鸟类关联
+UserObservation(用户观察记录表):记录用户在实际观鸟中的观察数据
+RouteReview(路线评价表):存储用户对路线的评价和反馈
+
+# SQL语句
+## 建表语句
+-- 地区表
+CREATE TABLE "Region" (
+    "objectId" VARCHAR(36) PRIMARY KEY,
+    "createdAt" TIMESTAMP NOT NULL,
+    "updatedAt" TIMESTAMP NOT NULL,
+    "name" VARCHAR(100) NOT NULL,
+    "description" TEXT,
+    "climate" VARCHAR(50),
+    "terrain" VARCHAR(50),
+    "areaSize" NUMERIC(10,2),
+    "bestSeason" VARCHAR(100),
+    "featureTags" JSONB,
+    "centerLocation" JSONB, -- {latitude: x, longitude: y}
+    "mapImage" VARCHAR(255), -- 存储图片路径
+    "popularity" NUMERIC(5,2) DEFAULT 0
+);
+
+-- 鸟类表
+CREATE TABLE "Bird" (
+    "objectId" VARCHAR(36) PRIMARY KEY,
+    "createdAt" TIMESTAMP NOT NULL,
+    "updatedAt" TIMESTAMP NOT NULL,
+    "name" VARCHAR(100) NOT NULL,
+    "scientificName" VARCHAR(100),
+    "family" VARCHAR(100),
+    "description" TEXT,
+    "habitats" JSONB,
+    "conservationStatus" VARCHAR(50),
+    "seasons" JSONB,
+    "image" VARCHAR(255), -- 存储图片路径
+    "size" VARCHAR(50),
+    "color" VARCHAR(100),
+    "diet" VARCHAR(100)
+);
+
+-- 观鸟路线表
+CREATE TABLE "BirdRoute" (
+    "objectId" VARCHAR(36) PRIMARY KEY,
+    "createdAt" TIMESTAMP NOT NULL,
+    "updatedAt" TIMESTAMP NOT NULL,
+    "name" VARCHAR(100) NOT NULL,
+    "description" TEXT,
+    "regionId" VARCHAR(36) REFERENCES "Region"("objectId"),
+    "length" NUMERIC(10,2),
+    "difficulty" NUMERIC(2,1),
+    "estimatedTime" NUMERIC(10,2),
+    "pathPoints" JSONB,
+    "commonBirds" JSONB, -- 存储鸟类ID数组
+    "bestMonths" JSONB,
+    "startPoint" VARCHAR(255),
+    "endPoint" VARCHAR(255),
+    "rating" NUMERIC(3,2) DEFAULT 0,
+    "facilities" JSONB,
+    "routeImage" VARCHAR(255), -- 存储图片路径
+    "popularity" NUMERIC(5,2) DEFAULT 0
+);
+
+-- 用户观察记录表
+CREATE TABLE "UserObservation" (
+    "objectId" VARCHAR(36) PRIMARY KEY,
+    "createdAt" TIMESTAMP NOT NULL,
+    "updatedAt" TIMESTAMP NOT NULL,
+    "userId" VARCHAR(36) NOT NULL, -- 假设有用户表
+    "birdId" VARCHAR(36) REFERENCES "Bird"("objectId"),
+    "routeId" VARCHAR(36) REFERENCES "BirdRoute"("objectId"),
+    "observationTime" TIMESTAMP,
+    "location" JSONB, -- {latitude: x, longitude: y}
+    "weather" VARCHAR(50),
+    "notes" TEXT,
+    "photo" VARCHAR(255), -- 存储图片路径
+    "confidence" NUMERIC(3,2)
+);
+
+-- 路线评价表
+CREATE TABLE "RouteReview" (
+    "objectId" VARCHAR(36) PRIMARY KEY,
+    "createdAt" TIMESTAMP NOT NULL,
+    "updatedAt" TIMESTAMP NOT NULL,
+    "userId" VARCHAR(36) NOT NULL, -- 假设有用户表
+    "routeId" VARCHAR(36) REFERENCES "BirdRoute"("objectId"),
+    "rating" NUMERIC(2,1),
+    "comment" TEXT,
+    "tags" JSONB,
+    "visitDate" DATE,
+    "birdsSeen" JSONB -- 存储鸟类ID数组
+);
+
+## 测试数据插入语句
+-- 插入地区数据
+INSERT INTO "Region" ("objectId", "createdAt", "updatedAt", "name", "description", "climate", "terrain", "areaSize", "bestSeason", "featureTags", "centerLocation", "mapImage", "popularity")
+VALUES 
+('reg001', NOW(), NOW(), '洞庭湖湿地', '中国最大的淡水湖之一,重要的候鸟栖息地', '亚热带季风气候', '湿地', 2625.00, '10月-次年3月', 
+ '["湿地","候鸟","自然保护区"]', '{"latitude": 29.33, "longitude": 112.8}', 'maps/dongting.jpg', 4.5),
+('reg002', NOW(), NOW(), '青海湖', '中国最大的咸水湖,高原鸟类天堂', '高原气候', '湖泊草原', 4583.00, '5月-9月', 
+ '["高原湖泊","草原","珍稀鸟类"]', '{"latitude": 36.9, "longitude": 100.2}', 'maps/qinghai.jpg', 4.8);
+
+-- 插入鸟类数据
+INSERT INTO "Bird" ("objectId", "createdAt", "updatedAt", "name", "scientificName", "family", "description", "habitats", "conservationStatus", "seasons", "image", "size", "color", "diet")
+VALUES
+('bird001', NOW(), NOW(), '白鹤', 'Grus leucogeranus', '鹤科', '大型涉禽,体羽几乎纯白色', '["湿地","沼泽"]', '极危', '["冬季"]', 'birds/white_crane.jpg', '大型', '白色', '杂食'),
+('bird002', NOW(), NOW(), '黑颈鹤', 'Grus nigricollis', '鹤科', '世界上唯一生长繁殖在高原的鹤类', '["高原湿地","沼泽"]', '易危', '["春季","夏季"]', 'birds/blackneck_crane.jpg', '大型', '灰白色', '杂食'),
+('bird003', NOW(), NOW(), '红嘴鸥', 'Larus ridibundus', '鸥科', '常见水鸟,嘴红色,头部深褐色', '["湖泊","河流"]', '无危', '["全年"]', 'birds/blackheaded_gull.jpg', '中型', '白色与灰色', '杂食');
+
+-- 插入观鸟路线数据
+INSERT INTO "BirdRoute" ("objectId", "createdAt", "updatedAt", "name", "description", "regionId", "length", "difficulty", "estimatedTime", "pathPoints", "commonBirds", "bestMonths", "startPoint", "endPoint", "rating", "facilities", "routeImage", "popularity")
+VALUES
+('route001', NOW(), NOW(), '洞庭湖冬季观鹤线', '观赏白鹤等珍稀候鸟的最佳路线', 'reg001', 8.5, 2.5, 4.0, 
+ '[{"latitude": 29.331, "longitude": 112.801}, {"latitude": 29.335, "longitude": 112.805}]', 
+ '["bird001","bird003"]', '["11","12","1","2"]', '东洞庭湖保护区入口', '观鸟塔', 4.7, '["观鸟塔","厕所","停车场"]', 'routes/dongting_winter.jpg', 4.8),
+('route002', NOW(), NOW(), '青海湖夏季观鸟环线', '环青海湖观鸟自驾路线', 'reg002', 360.0, 3.0, 48.0, 
+ '[{"latitude": 36.91, "longitude": 100.21}, {"latitude": 36.92, "longitude": 100.25}]', 
+ '["bird002","bird003"]', '["6","7","8"]', '青海湖景区东门', '青海湖景区西门', 4.9, '["观景台","露营区","餐厅"]', 'routes/qinghai_summer.jpg', 4.9);
+
+-- 插入用户观察记录
+INSERT INTO "UserObservation" ("objectId", "createdAt", "updatedAt", "userId", "birdId", "routeId", "observationTime", "location", "weather", "notes", "photo", "confidence")
+VALUES
+('obs001', NOW(), NOW(), 'user001', 'bird001', 'route001', '2023-01-15 08:30:00', '{"latitude": 29.332, "longitude": 112.802}', '晴天', '观察到3只成年白鹤觅食', 'photos/obs001.jpg', 0.95),
+('obs002', NOW(), NOW(), 'user002', 'bird002', 'route002', '2023-07-20 10:15:00', '{"latitude": 36.915, "longitude": 100.22}', '多云', '一群黑颈鹤在湖边栖息', 'photos/obs002.jpg', 0.98);
+
+-- 插入路线评价
+INSERT INTO "RouteReview" ("objectId", "createdAt", "updatedAt", "userId", "routeId", "rating", "comment", "tags", "visitDate", "birdsSeen")
+VALUES
+('rev001', NOW(), NOW(), 'user001', 'route001', 5.0, '非常棒的观鹤体验,看到了珍稀的白鹤', '["专业向导","设施完善"]', '2023-01-15', '["bird001","bird003"]'),
+('rev002', NOW(), NOW(), 'user002', 'route002', 4.5, '景色壮丽,鸟类丰富,但部分路段较难走', '["风景优美","挑战性"]', '2023-07-20', '["bird002","bird003"]');

+ 2 - 1
myapp/.vscode/settings.json

@@ -1,3 +1,4 @@
 {
-  "typescript.preferences.autoImportFileExcludePatterns": ["@ionic/angular/common", "@ionic/angular/standalone"]
+  "typescript.preferences.autoImportFileExcludePatterns": ["@ionic/angular/common", "@ionic/angular/standalone"],
+   "plantuml.server":"http://www.plantuml.com/plantuml"
 }

+ 0 - 1
myapp/src/app/tab1/neighborhood/neighborhood.page.ts

@@ -33,7 +33,6 @@ getStars(rating: number): string[] {
 }
 
   ngOnInit() {
-    this.loadBirdType();
   }
   async importBrid(){
     const birdDataset = [