【问题标题】:Contact Database Design联系数据库设计
【发布时间】:2013-10-27 23:14:28
【问题描述】:

我想为移动联系人设计他的数据库。这是查看我已经设计的内容的链接:

http://upload7.ir/images/87645261298795662612.jpg

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

这种设计不行!有没有设计完之后再增加一列?

或者我必须彻底改变这一点?

如果我改变了这个,我该怎么办?取另一张桌子并取其中的所有电话号码并添加 1 列以获取有关其电话/传真/手机的信息?如果我这样做,我的数据库中总会有一个数据不断重复,这不好!寻找另一个建议。

谢谢:-)

【问题讨论】:

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

标签: database-design android-contacts


【解决方案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 |
| .. | ....... | ......... | .............. |
+----+---------+-----------+----------------+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 2011-09-01
    • 1970-01-01
    • 2012-02-12
    • 2016-05-12
    • 1970-01-01
    相关资源
    最近更新 更多