Sql 数据库建模、用户、主持人、管理员

Sql 数据库建模、用户、主持人、管理员,sql,database,database-design,Sql,Database,Database Design,我有3种类型的用户(用户、版主、管理员)。 和所有3个的具体数据(用户有姓名,管理员有电话号码…) 我的角色解决方案是两个,一个是表“用户”(id,name…),一个是表“角色”(id角色,name…),一个是外部参照表usersXrefRoles(join table)(IDusers,IdRoles) 但这不是“所有3个表都有不同的字段”部分的解决方案,换句话说,我必须有3个单独的表(用户、版主、管理员),还是某种继承 这种od问题的最佳做法是什么?子分类。您应该有三个表,但它们应该是用户(

我有3种类型的用户(用户、版主、管理员)。 和所有3个的具体数据(用户有姓名,管理员有电话号码…)

我的角色解决方案是两个,一个是表“用户”(id,name…),一个是表“角色”(id角色,name…),一个是外部参照表usersXrefRoles(join table)(IDusers,IdRoles) 但这不是“所有3个表都有不同的字段”部分的解决方案,换句话说,我必须有3个单独的表(用户、版主、管理员),还是某种继承


这种od问题的最佳做法是什么?

子分类。您应该有三个表,但它们应该是用户(userId、name和所有用户共有的其他字段),每个用户都应该在这个表中,包括版主和管理员。然后,为作为版主的用户和作为管理员的用户创建另外两个具有相同PK值的表,其中包含特定于这些角色的数据字段。

子分类。您应该有三个表,但它们应该是用户(userId、name和所有用户共有的其他字段),每个用户都应该在这个表中,包括版主和管理员。然后,为作为主持人的用户和作为管理员的用户创建另外两个具有相同PK值的表,其中包含特定于这些角色的数据字段。

如果您只有三种类型的角色,那么您可以创建一个简单的单用户表,其中包含一个枚举值(或
role\u id
列,用于保存对角色表的引用-如果需要的话)

如果每个用户类型都有不同的字段,可以使用其他表,但最好能告诉您是哪种类型的字段。也许有更好的方法来实现您想要的功能


另外,请阅读并将其作为静态角色的替代品。许多流行的框架都内置了对此类解决方案的支持或扩展。

如果您只有三种类型的角色,那么您可以使用一个简单的单用户表,该表包含一个枚举值(或
role\u id
列,用于保存对角色表的引用-如果需要的话)

如果每个用户类型都有不同的字段,可以使用其他表,但最好能告诉您是哪种类型的字段。也许有更好的方法来实现您想要的功能


另外,请阅读和作为静态角色的替代品。许多流行的框架都内置了对此类解决方案的支持或扩展。

字段真的有那么大的不同吗?如果没有那么大的不同,只需将它们放在一个表中,并将不需要的字段留空即可。“最佳实践”由其他约束条件决定,如e例如,有多少其他表需要引用用户表?字段真的有那么大的不同吗?如果它们没有那么大的不同,只需将它们全部放在一个表中,并将不需要的表留空。“最佳实践”由其他约束条件决定,例如,有多少其他表需要引用用户表?Thx为快速回答,请选择us主持人有姓名、电话、城市,主持人有最后登录日期、类别(fk)…管理员有产品等。因此字段非常不同。我接受了您的建议,子类化正是我所需要的。thxagain@TestAndSet我强烈建议您只使用一个用户表和所有描述的列来应用于所有用户。产品将只有“用户id”这属于管理员,而不应用于某个类别的用户将具有“空”类别。子类化将使应用程序复杂化,并使“提升”用户成为管理员或版主更加困难。Thx用于快速回答,用户有姓名、电话、城市、版主有最后登录日期、类别(fk)…管理员有产品等。因此字段非常不同。我接受了您的建议,子类化正是我所需要的。thxagain@TestAndSet我强烈建议您只使用一个用户表和所有描述的列来应用于所有用户。产品将只有“用户id”这属于管理员,而不应用于某个类别的用户将拥有一个“空”类别。子类化将使您的应用程序复杂化,并使“提升”用户成为管理员或版主变得更加困难。