Database design 联系人数据库设计

Database design 联系人数据库设计,database-design,android-contacts,Database Design,Android Contacts,我想为移动联系人设计he数据库。以下是我已经设计的链接: 这是我的样品!它并不完整,但只是一个小小的尝试。我这里有个问题!我想要无限的传真号码或电话号码等 用这种设计是不行的!在设计之后是否还要添加另一列 或者我必须彻底改变这一切 如果我改变了这个,我该怎么办?再拿一张桌子,把所有的电话号码都记下来,加上一列,就可以得到关于它的电话/传真/手机的信息?如果我这样做,我的数据库中总是有重复的数据,这是不好的!寻找另一个建议 谢谢:-)这是一种常用的手机/传真/等号码设计。每个用户都可以根据需要拥

我想为移动联系人设计he数据库。以下是我已经设计的链接:

这是我的样品!它并不完整,但只是一个小小的尝试。我这里有个问题!我想要无限的传真号码或电话号码等

用这种设计是不行的!在设计之后是否还要添加另一列

或者我必须彻底改变这一切

如果我改变了这个,我该怎么办?再拿一张桌子,把所有的电话号码都记下来,加上一列,就可以得到关于它的电话/传真/手机的信息?如果我这样做,我的数据库中总是有重复的数据,这是不好的!寻找另一个建议


谢谢:-)

这是一种常用的手机/传真/等号码设计。每个用户都可以根据需要拥有任意多的手机/传真/电话记录。您可能需要更改数字表,在美国,电话号码如下所示:1-234-567-9876。
1
是国家代码,
234
是“区号”;
567
是“交易所”;
9876
是“车站”。我使用
char
数据类型,以防必须存储前导为0的数字

number_types
    id              unsigned int(P)
    description     varchar(15)

+----+-------------+
| id | description |
+----+-------------+
|  1 | Mobile      |
|  2 | Phone       |
|  3 | Fax         |
| .. | ........... |
+----+-------------+

numbers
    id              unsigned int(P)
    country_code    char(3)
    area_code       char(3)
    exchange        char(3)
    station         char(4)
    extension       varchar(10) // Default to NULL

+----+--------------+-----------+----------+---------+-----------+
| id | country_code | area_code | exchange | station | extension |
+----+--------------+-----------+----------+---------+-----------+
|  1 |           98 |        21 |      555 |    5555 | NULL      |
|  1 |           01 |       555 |      555 |    5555 | NULL      |
| .. | ............ | ......... | ........ | ....... | ......... |
+----+--------------+-----------+----------+---------+-----------+

users
    id              unsigned int(P)
    first_name      varchar(30)
    last_name       varchar(30)
    ...

+----+------------+-----------+-----+
| id | first_name | last_name | ... |
+----+------------+-----------+-----+
|  1 | Saroukhani | Smith     | ... |
|  2 | Benny      | Hill      | ... |
| .. | .......... | ......... | ... |
+----+------------+-----------+-----+

users_numbers
    id                  unsigned int(P)
    user_id             unsigned int(F users.id)
    number_id           unsigned int(F numbers.id)
    number_type_id      unsigned int(F number_types.id)

+----+---------+-----------+----------------+
| id | user_id | number_id | number_type_id |
+----+---------+-----------+----------------+
|  1 |       1 |         1 |              1 |
|  2 |       2 |         2 |              1 |
| .. | ....... | ......... | .............. |
+----+---------+-----------+----------------+

这是一种常见的手机/传真/等号码保存设计。每个用户都可以根据需要拥有任意多的手机/传真/电话记录。您可能需要更改数字表,在美国,电话号码如下所示:1-234-567-9876。
1
是国家代码,
234
是“区号”;
567
是“交易所”;
9876
是“车站”。我使用
char
数据类型,以防必须存储前导为0的数字

number_types
    id              unsigned int(P)
    description     varchar(15)

+----+-------------+
| id | description |
+----+-------------+
|  1 | Mobile      |
|  2 | Phone       |
|  3 | Fax         |
| .. | ........... |
+----+-------------+

numbers
    id              unsigned int(P)
    country_code    char(3)
    area_code       char(3)
    exchange        char(3)
    station         char(4)
    extension       varchar(10) // Default to NULL

+----+--------------+-----------+----------+---------+-----------+
| id | country_code | area_code | exchange | station | extension |
+----+--------------+-----------+----------+---------+-----------+
|  1 |           98 |        21 |      555 |    5555 | NULL      |
|  1 |           01 |       555 |      555 |    5555 | NULL      |
| .. | ............ | ......... | ........ | ....... | ......... |
+----+--------------+-----------+----------+---------+-----------+

users
    id              unsigned int(P)
    first_name      varchar(30)
    last_name       varchar(30)
    ...

+----+------------+-----------+-----+
| id | first_name | last_name | ... |
+----+------------+-----------+-----+
|  1 | Saroukhani | Smith     | ... |
|  2 | Benny      | Hill      | ... |
| .. | .......... | ......... | ... |
+----+------------+-----------+-----+

users_numbers
    id                  unsigned int(P)
    user_id             unsigned int(F users.id)
    number_id           unsigned int(F numbers.id)
    number_type_id      unsigned int(F number_types.id)

+----+---------+-----------+----------------+
| id | user_id | number_id | number_type_id |
+----+---------+-----------+----------------+
|  1 |       1 |         1 |              1 |
|  2 |       2 |         2 |              1 |
| .. | ....... | ......... | .............. |
+----+---------+-----------+----------------+

是的,您可以将联系人号码(Id、ContactID(外键,取自联系人表)、号码、类型(传真/电话/手机)、详细信息等)带到另一张表中。在这种情况下,ContactID每次都会重复,但这比单独获取3个表要好得多,这是处理与同一联系人相关的多个数据的规范化方法。您的关注或其他建议将不胜感激。但此数据库仅适用于移动联系人!我认为,如果我们要使用这种表,它将使我们的数据库速度变慢!因为如果我们有10000条或更多记录,并且我们想为联系人再添加一条移动记录,它将位于表的末尾,这将使我们的程序延迟一段时间来处理该记录。如果我们为每种类型的号码使用特定的表,这将使我们的搜索速度更快,我们可以得到更好的查询,因为我们可以只为手机号码创建索引表,这可以用于通过手机号码或更多选项查找用户。再次感谢Ankit Arorabtw,当我说有一个字段总是重复的时候是类型字段。对于每个联系人,你都应该保留如下记录:1、1、123456、Mobile 2、1、123457、Mobile 3、2、123333、Mobile,正如你所看到的,Mobile字段不断重复。是的,你可以在另一个表中记录联系人号码(Id、ContactID(外键,取自联系人表)、号码、类型(传真/电话/手机)、详细信息)。在这种情况下,ContactID每次都会重复,但这比单独获取3个表要好得多,这是处理与同一联系人相关的多个数据的规范化方法。您的关注或其他建议将不胜感激。但此数据库仅适用于移动联系人!我认为,如果我们要使用这种表,它将使我们的数据库速度变慢!因为如果我们有10000条或更多记录,并且我们想为联系人再添加一条移动记录,它将位于表的末尾,这将使我们的程序延迟一段时间来处理该记录。如果我们为每种类型的号码使用特定的表,这将使我们的搜索速度更快,我们可以得到更好的查询,因为我们可以只为手机号码创建索引表,这可以用于通过手机号码或更多选项查找用户。再次感谢Ankit Arorabtw,当我说有一个字段总是重复的时候是类型字段。对于每个联系人,你都应该保留如下记录:1,1,123456,Mobile 2,1,123457,Mobile 3,2,123333,Mobile,正如你所看到的,Mobile字段不断重复。