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

lit*_*leK 12 mysql sql database

我正在为具有多个"类型"用户的组织设计数据库.起初,我只创建了一个用户表.但是,虽然所有用户共享一些公共信息(名字,姓氏,用户名,密码等),但每种用户类型都需要一个或两个不适用于所有用户的附加字段.虽然我可以创建这些附加字段并将它们设置为NULL,但我不希望这样做,因为字段是外键并且它对我造成了问题.

这种情况通常如何处理?

谢谢!

dj_*_*ult 9

你没有创建一个包含大量NULLS的大表的直觉就是正确的.从存储/回溯/维护的角度来看,这是一个坏主意,以及数据验证的观点(稍后将详细介绍).

最常见的两种方法:

1)拥有一个包含所有公共字段的用户表,包括"userType"字段.然后为每个包含额外字段的用户类型提供单独的表.所有用户在users表和一个或多个特定用户类型表中都有一行.这是最常规化和最有效的存储和快速登录.这还允许您使用约束和外键来确保每种用户类型的所有必需信息都可用.

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