当前位置:  开发笔记 > 编程语言 > 正文

地址簿数据库架构

如何解决《地址簿数据库架构》经验,为你挑选了1个好方法。

我需要为用户存储联系信息.我希望将此数据作为hCard显示在页面上,并可作为vCard下载.我也希望能够通过电话号码,电子邮件等搜索数据库.

您认为存储此数据的最佳方式是什么?由于用户可能有多个地址等,因此完全规范化将是一团糟.我正在考虑使用XML,但我不熟悉查询XML数据库字段.我仍然可以通过联系信息搜索用户吗?

我正在使用SQL Server 2005,如果这很重要的话.



1> Alan..:

考虑两个People及其地址表:

People (pid, prefix, firstName, lastName, suffix, DOB, ... primaryAddressTag )

AddressBook (pid, tag, address1, address2, city, stateProv, postalCode, ... )

People的主键(唯一标识每一行)是pid.AddressBook的PK是pid和tag的组合(pid, tag).

一些示例数据:

1, Kirk

2, Spock

地址簿

1, home, '123 Main Street', Iowa

1, work, 'USS Enterprise NCC-1701'

2, other, 'Mt. Selaya, Vulcan'

在这个例子中,Kirk有两个地址:一个是"家",一个是"工作".其中一个可以(并且应该)People在primaryAddressTag列中注明为外键(如交叉引用).

Spock有一个带有'other'标签的地址.由于这是Spock唯一的地址,因此值'other'应该在primaryAddressTagpid = 2 的列中.

这种模式具有很好的效果,可以防止同一个人通过意外重用标签来复制他们自己的任何地址,同时允许所有其他人使用他们喜欢的任何地址标签.

此外,通过FK引用primaryAddressTag,数据库系统本身将强制主要地址标记的有效性(通过我们数据库极客称之为引用完整性的东西),以便您或任何应用程序不必担心它.

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有