您的案例看起来像是类/子类的实例。
有两种设计SQL表以处理子类的经典方法。每种都有优点和缺点。
一种方法称为“单表继承”。在此设计中,只有一张桌子可供所有类型的用户使用。如果给定的列与给定的行不相关,则交集为NULL。可以添加一列以指示用户类型。
另一种方法称为“类表继承”。这很像Nanego给出的答案,但做了一些小的更改。有一个供用户使用的表,其中包含所有常用数据和一个id字段。每个子类都有一个表,其中包含与该子类有关的数据。id字段通常设置为用户表中匹配行中id字段的副本。这样,子类键可以起到双重作用,既充当主键又充当引用用户表的外键。最后一种技术称为“共享主键”。插入时需要一些编程,但这是值得的。它增强了关系的一对一性质,并加快了必要的联接。
您可以将所有这三种设计查找为SO中的标签或Web上的文章。
单表继承 类表继承
共享主键



