-1

我想学习乐趣并了解 Web 应用程序,我计划使用 Fiber 框架,可能使用 Mysql 或 postgres 作为数据库。我的问题有两个。

什么是多种用户类型的最佳实践。我知道 Go 并不是真正的 OOP 语言(我正在学习的第一语言不是 OOP)。很难弄清楚如何。因为我将有 2 个用户 1 个培训另一个客户。他们将共享一些类似的字段,即:姓名、电子邮件、密码等,以及一些对其他人来说是独一无二的。他们还将有一对多的关系(培训师可以有很多客户)。我理解 orms 可以处理这种关系。但是我将如何构建代码。我会拥有 2 个包含所有字段的模型结构,还是两个都派生自的接口。

我想我的第二部分更像是一个数据库问题。当我通常构建具有多种用户类型的应用程序时,它通常是由用户表上的 isAdmin 字段控制的,但由于用户类型需要不同的信息但有些相似,因此数据库设计的最佳实践是什么。我在想用户、培训师和客户表 3 个表。其中客户端和培训师表与用户表有 fk。这甚至是个好主意吗?

4

1 回答 1

1

如果您在 3 种类型的用户中有共同的字段,则可以使用嵌入来执行以下操作:

type commonUser struct {
    // common fields all go here
    Name string
}

type User struct {
    Foo string // field unique to User
    commonUser
}

type Trainer struct {
    Training bool // field unique to Trainer
    commonUser
}

type Client struct {
    ClientID string // field unique to Client
    commonUser
}

每种类型 ( User, Trainer, Client) 等都可以定义自己的接收器方法 (即func (c *Client) Save() {...}) 用于将记录存储在数据库中。这很可能是一个表(并使用类似的东西isAdminorisTrainer来区分它们;或者您可以将其拆分为多个单独的表(trainers,clients等)。

于 2020-07-16T23:53:34.823 回答