我正在创建一个应用程序,其中有两种不同类型的用户。我是否应该将所有用户数据放在一个表中,并添加“角色”字段以标识用户类型,还是应该为每种用户类型创建单独的表?每种用户类型都需要一些他们不共享的字段。
答案 0 :(得分:2)
对此的真正答案实际上取决于您的下游实施。在所有现实中,我很可能会认为您可以使用角色来识别用户并使用该角色来控制其他必填字段的验证。但这可能不适合您的情况。
关键是确定这是一个唯一的类型情况,还是您预计将来需要此解决方案的其他角色/用户类型。此外,还有其他功能与它需要重复核心用户功能(如验证等)的地方不同。
如果两个用户类型都通过同一页面登录,则拆分到两个用户表可能会使身份验证更加困难。
答案 1 :(得分:1)
如果差异是一列,则可以使用“角色”列将其放入一个表中。如果您发现一个角色需要的信息多于另一个角色,则可以为所有用户创建基表,然后将有问题的角色的其他信息存储到另一个表中,并使用id作为外键返回到包含该信息的表中
答案 2 :(得分:1)
一般来说,最好的设计是拥有一个很少更改细节的表,另一个表中包含来自第一个表的主键的外键约束,其中包含经常更改的信息。
就个人而言,我有一个'用户'表,其字段类型是他们的用户类型,辅助表中包含其他数据,用于识别您需要的更多细节。
然后,您可以在需要数据时在表之间进行简单连接,但如果只搜索主用户表,则快速扫描会更快。
答案 3 :(得分:0)
如上所述,为具有不同角色的用户创建一个表 - 只包含其中所有用户的公共属性。使用users表创建与1-1相关的其他2个表,并在这些表中保留每个用户类型的属性
答案 4 :(得分:0)
每个用户类型有多少列不同?
如果你有50个共同的列,并且每个类型只有两个不同的列 - 那么我可能会将这两种类型的用户放在同一个表中,只是让那些额外的列可以为空。
但是,如果这些类型的用户只共享两个,三个常见列(ID
和Name
),并且每列有25-50个单独的列 - 其中一些您可能想要制作{{1对于那种类型的用户 - 然后我会使用一个基表(只有公共属性)和每个用户类型的两个单独的“派生”表,引用该基表。
答案 5 :(得分:0)
每个用户类型将具有不与其他类型共享的字段的事实使得在没有任何其他信息的情况下,单独的表接近更简单的表。如果你使用一个表,那么你要么必须为所有用户属性添加列并用相当多的NULL填充表,要么将所有属性收集到某种编码的clob或blob中,这是非常不相关的,但在大数据和NoSQL环境,使用起来感觉很有趣。
如果您有数百种用户类型而不是两种,或者您有一种非常规的非规范化,复杂或编码属性信息,两个表应该没问题。但是,对“所有用户”的查询会很混乱,所以如果您的用户角色不同,请选择此路线。
如果用户可以拥有多个角色,那么一个包含公共数据的表和多个用于特定于角色的数据的表就可以正常工作,正如其他答案所述。