Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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
MySQL数据库设计,两种类型的记录-使用一个表还是两个单独的表?_Mysql_Sql_Database_Database Design - Fatal编程技术网

MySQL数据库设计,两种类型的记录-使用一个表还是两个单独的表?

MySQL数据库设计,两种类型的记录-使用一个表还是两个单独的表?,mysql,sql,database,database-design,Mysql,Sql,Database,Database Design,我正在构建一个应用程序,它将有两种不同类型的用户,让我们调用一个用户类型\u a和另一个用户类型\u b。我想知道是否应该在数据库中为这两种类型的用户创建一个表,并有一个属性来区分每个记录是什么类型的用户,或者是否应该为每种类型的用户创建两个单独的表 考虑事项: 1.99%的用户将是用户类型 2.除了用户类型a之外,用户类型b还需要属性(如信用卡等) 哪种设计方法是最佳的?或者这并不重要。假设用户类型b是真正的用户,则为用户提供一个表。创建另一个链接到用户表的表,以存储用户类型B的CC详细信息

我正在构建一个应用程序,它将有两种不同类型的用户,让我们调用一个用户类型\u a和另一个用户类型\u b。我想知道是否应该在数据库中为这两种类型的用户创建一个表,并有一个属性来区分每个记录是什么类型的用户,或者是否应该为每种类型的用户创建两个单独的表

考虑事项: 1.99%的用户将是用户类型 2.除了用户类型a之外,用户类型b还需要属性(如信用卡等)


哪种设计方法是最佳的?或者这并不重要。

假设用户类型b是真正的用户,则为用户提供一个表。创建另一个链接到用户表的表,以存储用户类型B的CC详细信息

这使您可以轻松地进行所有主要的用户更改(搜索用户、更改用户详细信息、查找用户以进行登录等),但不包含许多浪费的列


请注意,如果您存储的是信用卡号码,那么您的数据中心和体系结构就必须是,这非常昂贵。

一个用户表,假设用户类型b是真实用户。创建另一个链接到用户表的表,以存储用户类型B的CC详细信息

这使您可以轻松地进行所有主要的用户更改(搜索用户、更改用户详细信息、查找用户以进行登录等),但不包含许多浪费的列


请注意,如果您存储的是信用卡号码,那么您的数据中心和体系结构将不得不存储,这非常昂贵。

请使用一个表。他们都是用户。您的代码将在这两种类型之间有更广泛的用途,因此在处理用户时,您将不必执行两个sql查询(即使它们在99%的时间内都不相关)

使用一个表。他们都是用户。您的代码在这两种类型之间具有更广泛的用途,因此在处理用户时,您将不必执行两个sql查询(即使它们在99%的时间内都不相关)

最好的方法是将所有用户存储在同一个表中,并将外键与第二个表相关,该表包含额外信息

**USER TABLE**
NAME     AGE       TYPE     FK
Grant    25        Adult    1
Susan    4         Child    null
John     65        Adult    2

**EXTRA TABLE**
FK    CREDITCARD    OTHER
1     234234...     blah
2     2334...       blah

这将更有效地利用空间。

最好的方法是将所有用户存储在同一个表中,并将一个外键与包含额外信息的第二个表相关

**USER TABLE**
NAME     AGE       TYPE     FK
Grant    25        Adult    1
Susan    4         Child    null
John     65        Adult    2

**EXTRA TABLE**
FK    CREDITCARD    OTHER
1     234234...     blah
2     2334...       blah

这将更有效地利用空间。

因此听起来用户类型a和用户类型b在数据方面都是相同的,只是用户类型b在用户类型a之上和之外有额外的数据(但用户类型a没有任何这样的唯一数据)

鉴于此,我将创建一个存储用户类型数据(即两个用户类型的交集)的单用户表。然后为附加的用户类型数据创建第二个表,并使用外键将该表链接回用户。(请注意,用户表中没有定义用户类型的列。)


如何区分这两种用户类型之间的差异?简单:用户类型在第二个表中有一个相关行;用户类型不存在。这使得任何不关心差异的应用程序函数都可以轻松地获取每个人的公共用户数据,而需要额外用户类型数据(或只关心一种或另一种类型)的函数仍然可以确定谁是什么类型并获得额外的数据。

所以听起来用户类型a和用户类型b在数据方面都是相同的,只是用户类型b在用户类型a之上和之外有额外的数据(但用户类型a没有任何这样的唯一数据)

鉴于此,我将创建一个存储用户类型数据(即两个用户类型的交集)的单用户表。然后为附加的用户类型数据创建第二个表,并使用外键将该表链接回用户。(请注意,用户表中没有定义用户类型的列。)


如何区分这两种用户类型之间的差异?简单:用户类型在第二个表中有一个相关行;用户类型不存在。这使得任何不关心差异的应用程序函数都可以轻松地获取每个人的公共用户数据,而需要额外用户类型数据(或只关心一种或另一种类型)的函数仍然可以确定谁是什么类型并获取额外数据。

如果类型B仅包含通用用户类型的附加信息(列),则使用:

如果类型AB具有一些公共列和一组不同的列,则使用


我在这两种情况下都保留
User
表中的所有公共列——子类型表只有特定于每个表的列。请注意,
UserID
会传播到子类型表。

如果类型B只有通用用户类型的附加信息(列),则使用:

如果类型AB具有一些公共列和一组不同的列,则使用


我在这两种情况下都保留
User
表中的所有公共列——子类型表只有特定于每个表的列。请注意,
UserID
会传播到子类型表。

使用IsA关系,您可以使用常规数据创建表用户a表用户a,最终使用IsA关系创建表用户。使用IsA关系,您可以使用常规数据创建表用户a表用户b