我是一个独立开发者,想要做一个理财记账的应用。方便中国基金、股票和虚拟资产的收益汇总,并提供 AI 建议。能帮我设计好相关的表结构嘛,使用 Prisma 语法,不允许使用自增 id。
当设计表结构时,应该考虑如何组织和存储不同类型的资产信息,并且应该使其易于查询和更新。下面是一个简单的表结构设计,可以作为参考:
datasource db {
provider = "postgresql"
url = "postgresql://user:password@localhost:5432/mydatabase"
}
model User {
id String @id @default(cuid())
name String
email String @unique
password String
accounts Account[]
}
model Account {
id String @id @default(cuid())
name String
accountType AccountType
balance Float
currency Currency
transactions Transaction[]
user User @relation(fields: [userId], references: [id])
userId String
}
model Transaction {
id String @id @default(cuid())
amount Float
date DateTime
description String
category Category
subcategory Subcategory?
assetType AssetType
assetCode String
assetName String
assetSymbol String?
assetIssuer String?
assetUnit Float?
exchange Exchange?
account Account @relation(fields: [accountId], references: [id])
accountId String
}
enum AccountType {
BANK
CREDIT_CARD
INVESTMENT
}
enum Currency {
USD
RMB
EUR
}
enum Category {
INCOME
EXPENSE
INVESTMENT
}
enum Subcategory {
STOCK
FUND
CRYPTO
BOND
}
enum AssetType {
FUND // 基金
STOCK // 股票
CRYPTO // 虚拟资产
OTHER // 其他资产
}
enum Exchange {
SHSE // 上海证券交易所
SZSE // 深圳证券交易所
HKEX // 香港证券交易所
NASDAQ // 纳斯达克证券交易所
NYSE // 纽约证券交易所
OTHER // 其他交易所
}
这个表结构包含三个实体:User、Account 和 Transaction。User 表保存用户的基本信息;Account 表保存用户的账户信息,包括账户类型、余额等;Transaction 表保存用户的交易记录,包括交易金额、日期、描述、类别等。
在这个表结构中,Account 和 Transaction 都包含一个枚举类型字段,用于区分不同类型的资产,比如股票、基金和虚拟资产等。另外,Transaction 表中还包含了一些其他的字段,用于记录资产的具体信息,比如资产代码、名称、交易所等。
需要注意的是,这只是一个基本的表结构设计,您可能需要根据您的具体需求进行调整和修改。同时,Prisma 支持多种数据库,您可以根据您的需求选择适合的数据库。另外,由于您要求不使用自增 id,所以我使用了 Prisma 提供的 @id @default(cuid())
声明来指定一个使用 cuid 生成的随机字符串作为 id 字段。同时,我使用了枚举类型来表示不同的资产类型和交易类型,这样可以使代码更加可读和易于维护。最后,由于您需要支持多种类型的虚拟资产,可以考虑将虚拟资产的具体信息存储在 Transaction 表的 assetCode、assetName、assetSymbol、assetIssuer 和 assetUnit 等字段中。