一尘不染

MySQL问题-如何处理多种类型的用户-一个表还是多个表?

mysql

我正在为具有多个“类型”用户的组织设计数据库。首先,我只创建了一个用户表。但是,尽管所有用户共享一些公共信息(名字,姓氏,用户名,密码等),但是每种用户类型都需要一个或两个其他字段,这些字段不适用于所有用户。尽管我可以创建这些附加字段并将其设置为NULL,但我不希望这样做,因为这些字段是外键,并且对我造成了麻烦。

这种情况通常如何处理?

谢谢!


阅读 904

收藏
2020-05-17

共1个答案

一尘不染

您的直觉是不创建带有大量NULL的大表。从存储/检索/维护的角度以及数据验证的角度来看,这是一个坏主意(稍后会详细介绍)。

两种最常见的缓存:

1)有一个包含所有公共字段的用户表,其中包括“
userType”字段。然后为每个包含额外字段的用户类型创建一个单独的表。所有用户在用户表和一个或多个特定用户类型表中都有一行。这是用于存储和快速登录的最规范和最有效的方法。这也使您可以使用约束和外键来确保每种用户类型的所有必需信息均可用。

2)有一个包含所有公共字段的用户表。拥有另一个名为 UserAttributes之 类的
,该表具有用于userid,key和value的字段。特定用户的任何其他元数据都可以存储在此处。这样做的好处是,不需要任何数据库管理就可以为每种用户类型添加新的用户类型或要存储的元数据。但是,它不允许您在数据库级别进行任何数据验证。

2020-05-17