【发布时间】:2009-07-28 23:30:30
【问题描述】:
我正在设计一个存储简单联系信息(名字/姓氏等)的数据库应用程序,并且我还必须存储电话号码。除了电话号码之外,我还必须存储它们的用途(移动、商业等),并可能为每个电话号码附加评论。
我的第一个方法是规范化电话号码并将其保存在单独的表格中,这样我就有了“联系人”和“电话号码”表格。 PhoneNumbers 表如下所示:
Id int PK
ContactId int FK<->Contacts.Id
PhoneNumber nvarchar(22)
Description nvarchar(100)
但是,如果我只是将此信息存储为每个联系人记录的一部分(假设我限制可以存储的电话号码总数,例如 4总数)。
但是,我最终得到了这样一个“丑陋”的结构:
PhoneNumber1 nvarchar(22)
Description1 nvarchar(100)
PhoneNumber2 nvarchar(22)
Description2 nvarchar(100)
等等。等等
这对我来说看起来很业余,但我看到了以下优点:
1) 在 ASP.NET MVC 中,我可以简单地将输入文本框附加到我的 LINQ 对象的属性中,然后完成记录添加和更新的连接。
2) 检索信息无需 SQL 连接。
不幸的是,我对表格宽度问题等问题不是很了解(我读到如果它变得太大/太多列并且出现性能问题,这可能会导致问题?)然后这也意味着当我搜索电话号码如果我将其保存在单独的表格中,我将不得不查看 4 个字段而不是 1 个字段。
我的应用程序有大约 80% 的搜索/数据检索活动,因此搜索性能是一个重要因素。
感谢您帮助我们找到正确的方法。单独的桌子还是把它放在一张桌子上?谢谢!
【问题讨论】:
-
我在下面给出了答案,但还有一条建议是监控初始性能并阅读有关创建适当索引以适合您的 LINQ to SQL 设置的内容。监控数据库性能也是一项持续的事情,随着表的增长和可能的功能变化,最好定期检查您的数据库性能,而不是等待用户抱怨他们的体验受到影响。
-
这是一个很好的解决方案...直到您需要 5 个电话号码而不是 4 个。标准化以进行维护。
标签: sql asp.net-mvc linq database-design