【问题标题】:Phonebook database design电话簿数据库设计
【发布时间】:2011-11-05 04:56:31
【问题描述】:

我正在为 web base(ASP.NET) 电话簿设计数据库 - 联系人管理器软件。
每个联系人可能有不同的电话类型..(家庭,工作,手机等......) 这是我的数据库设计:
电话类型包含例如:

  • 首页
  • 工作
  • 紧急情况 或用户想要的任何东西。


米 这是很好的设计吗?
我认为这种设计存在问题,我无法在网格中向用户显示联系人及其所有号码(我的意思是每个联系人的所有号码都在一行中,而不是每行联系人的数量)。 你有什么建议?


我必须在网格中显示所有电话类型的所有联系人。 我想我现在的设计会有问题。

【问题讨论】:

  • 你可以用一个(有点混乱的)存储过程来做到这一点。设计本身非常简洁,我想不出这样一种设计,您可以在不事先知道所有PhoneTypes 的情况下,通过简单的 SQL 查询以网格模式组织所有电话号码。
  • 你最终解决了这个问题吗?

标签: .net sql-server database-design


【解决方案1】:

我认为这个设计有问题,我无法显示 联系人及其所有号码在用户的网格中。你的...是 建议?

你可以通过一个简单的查询来做到这一点。

select c.contactid, c.contactname,
       pt.typetitle,
       pn.phoneno
from contact c
inner join phonenumber pn on pn.contactid = c.contactid
inner join phonetype pt on pt.phonetypeid = pn.phonetype

为了数据完整性,除了主键约束之外,您还需要一些 UNIQUE 约束。如果我是你,我会考虑对 ContactName、TypeTitle 和对(ContactID、PhoneType)的 UNIQUE 约束。事实上,这对 (ContactID, PhoneType) 可能是比 PhoneID 更好的主键;考虑完全放弃 PhoneID。

【讨论】:

  • 我试过你的查询。例如,如果姓名为 John 的联系人有三个号码,您的查询将返回三行,但我必须在一行中显示联系人电话。我编辑了我的问题的最后一行,我认为现在更清楚了
  • 您可以使用 PIVOT,但由于您的用户可以添加他们喜欢的任何类别,因此您不能保证生成不需要水平滚动的行。如果你能改变这个要求,你的生活会变得更轻松。
猜你喜欢
  • 2012-12-20
  • 2017-04-20
  • 1970-01-01
  • 2016-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多