Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database design 数据库模式问题_Database Design - Fatal编程技术网

Database design 数据库模式问题

Database design 数据库模式问题,database-design,Database Design,我正在创建一个应用程序,其中有两种不同类型的用户。我应该将所有用户数据放在一个表中,并添加“角色”字段以标识用户类型,还是应该为每个用户类型创建一个单独的表?每种用户类型都需要几个不共享的字段。如果差异是一列,您可以使用角色列进行此操作,并将它们放在一个表中。如果您发现一个角色比另一个角色需要更多的信息,您可以为所有用户创建一个基表,然后将有关角色的其他信息存储到另一个表中,并使用id作为外键返回到包含信息的表中。如果差异是一列,则可以使用角色列进行此操作,并将其放入其中桌子如果您发现一个角色比

我正在创建一个应用程序,其中有两种不同类型的用户。我应该将所有用户数据放在一个表中,并添加“角色”字段以标识用户类型,还是应该为每个用户类型创建一个单独的表?每种用户类型都需要几个不共享的字段。

如果差异是一列,您可以使用角色列进行此操作,并将它们放在一个表中。如果您发现一个角色比另一个角色需要更多的信息,您可以为所有用户创建一个基表,然后将有关角色的其他信息存储到另一个表中,并使用id作为外键返回到包含信息的表中。

如果差异是一列,则可以使用角色列进行此操作,并将其放入其中桌子如果您发现一个角色比另一个角色需要更多的信息,您可以为所有用户创建一个基表,然后将有关角色的其他信息存储到另一个表中,并使用id作为外键返回到包含信息的表。

这一问题的真正答案将取决于您的这在所有的现实中,我很可能认为您可能会使用一个角色来识别用户,并使用该角色来控制其他必填字段的验证。但这可能不适合你的情况

关键将是确定这是一种单一类型的情况,还是您预期将来会有其他需要此解决方案的角色/用户类型。此外,是否有其他功能不同于要求复制核心用户功能(如验证等)的功能


拆分为两个用户表可能会使身份验证更加困难,例如,如果两个用户类型都通过同一页面登录。

这一问题的真正答案将取决于您的下游实现。在所有的现实中,我很可能认为您可能会使用一个角色来识别用户,并使用该角色来控制其他必填字段的验证。但这可能不适合你的情况

关键将是确定这是一种单一类型的情况,还是您预期将来会有其他需要此解决方案的角色/用户类型。此外,是否有其他功能不同于要求复制核心用户功能(如验证等)的功能


拆分为两个用户表可能会使身份验证更加困难,例如,如果两个用户类型都通过同一页面登录。

一般来说,最好的设计是有一个具有很少更改细节的表,以及另一个表,该表具有来自第一个表的主键的外键约束,其中包含经常更改的信息

就我个人而言,我会有一个“用户”表,其中字段类型为他们是什么类型的用户,第二个表包含其他数据,确定您需要的更多细节


然后,您可以在需要数据时在表之间进行简单的连接,但如果您只搜索主用户表,快速扫描会快得多。

一般来说,最好的设计是有一个很少更改细节的表,以及另一个表,该表具有来自第一个表的主键的外键约束,其中包含经常更改的信息

就我个人而言,我会有一个“用户”表,其中字段类型为他们是什么类型的用户,第二个表包含其他数据,确定您需要的更多细节


然后,您可以在需要数据时在表之间进行简单的联接,但是如果您只搜索主用户表,快速扫描会快得多。

为用户创建一个单独的表,如您所说,具有不同的角色,其中只有所有用户的公共属性。创建与用户表1-1相关的其他两个表,并在这些表中保留每个用户类型的属性

为用户创建一个单独的表,具有不同的角色,正如您所说的-其中只有所有用户的公共属性。创建与用户表1-1相关的其他2个表,并在这些表中保留每个用户类型的属性

每个用户类型有多少列是不同的

如果共有50个列,并且每种类型只有另外两个不同的列,那么我可能会将这两种类型的用户放在同一个表中,并使这些额外的列可以为空


但是,如果这些类型的用户只共享两个、三个公共列(
ID
Name
),并且每个列都有25-50个独立的列,其中一些列可能需要使该类型的用户的
不为NULL
,那么我会使用一个基表(只有公共属性)和两个独立的“派生”每个用户类型的表,引用该基表。

每个用户类型有多少列是不同的

如果共有50个列,并且每种类型只有另外两个不同的列,那么我可能会将这两种类型的用户放在同一个表中,并使这些额外的列可以为空


但是,如果这些类型的用户只共享两个、三个公共列(
ID
Name
),并且每个列都有25-50个独立的列,其中一些列可能需要使该类型的用户的
不为NULL
,那么我会使用一个基表(只有公共属性)和两个独立的“派生”每个用户类型的表,引用该基表。

每个用户类型都有不与其他类型共享的字段,这使得在没有任何其他信息的情况下,单独的表更简单。如果您使用一个表,那么您要么必须为所有用户属性添加列,并用大量空值填充该表,要么将所有属性收集到某种编码的clob或blob中,这是非常不相关的,但在大数据和NoSQL环境中,感觉很有趣