2011-04-06 70 views
0

我正在构建一个具有两种不同类型用户的应用程序,我们可以调用一个User_type_a和另一个User_type_b。我想知道是否应该在我的数据库中为两种类型的用户创建一个表,并且有一个属性可以区分每个记录的类型,或者我应该为每种类型的用户创建两个单独的表。MySQL数据库设计,两种类型的记录 - 使用一个表还是两个单独的表?

注意事项:所有用户的 1. 99%将是User_type_a 2. User_type_b将要求除User_type_a特性(如信用卡#的,等等)

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

+0

使用IsA关系,您可以创建具有常规数据的表用户a表user_a和最终表user_b – Dalen 2011-04-06 22:09:42

回答

1

做到这将是最好的方式做2个sql查询将所有用户存储在同一个表中,并且拥有与第二个表相关的外键,该表包含额外的信息。

**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 

这对空间效率更高。

2

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

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

请注意,如果你是存储信用卡号码,您的数据中心和建筑将不得不PCI compliant,这是昂贵的。

0

使用一个表。他们都是用户。您的代码将有两种类型之间应用较为普遍,所以你会避免与用户打交道时(即使它们是不相关的99%的时间)

1

因此,听起来像User_type_a和User_type_b在数据方面都是相同的,只是User_type_b具有超出User_type_a的额外数据(但是User_type_a没有像这样的任何唯一数据)。

鉴于此,我会创建一个存储User_type_a数据(即,两个用户类型的交叉点)的单个用户表。然后为额外的User_type_b数据创建第二个表,并使用外键将该表连接到用户。 (请注意,没有列在这里的用户表定义哪些用户属于哪个类型。)

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

2

如果类型仅具有附加信息(列)到一般的用户类型,然后使用: enter image description here

如果类型有一些共同的列和一组不同的列的每一个,然后使用 enter image description here

我这两种情况下保留在User表中的所有常见列 - 子类型表只有专门针对每个列。请注意0​​传播到子类型表。