2010-11-07 52 views
0

说我有一列定义为地址。另外,我有一个记录,我们称之为鲁迪的。现在Rudy's有多个地址,所以我需要包含多个地址,以便它们都可以搜索。在SQL中处理解决方案的最佳方法是什么?将多个值添加到sql

回答

2

你应该添加一个地址列的子表。地址存储在子表中时,您将拥有一对多关系。您可以根据需要为每个用户添加尽可能多的地址。你也可以添加额外的信息,如地址类型(家庭,工作或小学,中学等)。

我不会去一列地址。如果这是一个邮政地址,最好有更多的专栏,如街道,城镇,门牌号码等。那么你可以在你的列上使用索引。

+0

知道这个很好的教程? – scifirocket 2010-11-07 22:51:41

+0

@scifirocket - 阅读关于关系数据库和数据库规范化:http://en.wikipedia.org/wiki/Database_normalization。你也可以在YouTube上找到一些不错的例子。 – Novitzky 2010-11-08 00:47:31

1

你可以尝试这样的事:

CREATE TABLE [dbo].[Person](
[PersonId] [int] IDENTITY(1,1) NOT NULL, 
[FullName] [varchar](50) NULL, 
CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED ([PersonId] ASC)) 
GO 

CREATE TABLE [dbo].[Addresses](
[AddressId] [int] IDENTITY(1,1) NOT NULL, 
[PersonId] [int] NOT NULL, 
[AddressLine1] [varchar](50) NULL, 
[AddressLine2] [varchar](50) NULL, 
[City] [varchar](50) NULL, 
[State] [varchar](4) NULL, 
[Country] [varchar](50) NULL, 
CONSTRAINT [PK_Addresses] PRIMARY KEY CLUSTERED ([AddressId] ASC)) 
GO 

ALTER TABLE [dbo].[Addresses] 
WITH CHECK ADD CONSTRAINT [FK_Addresses_Person] FOREIGN KEY([PersonId]) 
REFERENCES [dbo].[Person] ([PersonId]) 
GO 

ALTER TABLE [dbo].[Addresses] CHECK CONSTRAINT [FK_Addresses_Person] 
GO 

当然,你可以把它复杂,只要你想,然后按照以前的建议,用于存储地址类型等

这可能有助于MS下载来自http://sqlserversamples.codeplex.com/的示例并遵循其最佳做法。