从多个Web服务中为城市详细信息设计数据库

时间:2013-02-07 09:34:25

标签: sql-server-2008 database-design

我正在开展旅行申请,所以我们必须处理不同的网络服务,如GTA,Gallileo,Kuoni等。获取有关酒店详细信息的信息。 每个Web服务都有自己的城市代码和城市名称列表。 我想设计一个表来存储来自不同网络服务的城市细节,经过一些研究我得出了这两种方法

第一种方法

CREATE TABLE [dbo].[City](
[CityID] [int] NOT NULL,
[CountryCode] [varchar](5) NOT NULL,
[AppCityCode] [varchar](10) NOT NULL,
[AppCityName] [varchar](200) NOT NULL,
[GTACityCode] [varchar](10) NULL,
[GTACityName] [varchar](200) NULL,
[GWSCityCode] [varchar](10) NULL,
[GWSCityName] [varchar](200) NULL,
[KuoniCityCode] [varchar](10) NULL,
....
....
....
....
....
....
)

在这种方法中,当添加新的Web服务时,由于此修改,添加了与Web服务相对应的两列(城市代码和城市名称),并且存储过程和前端应用程序代码中将发生更改。 在文本框中加载城市时不会出现重复

第二种方法 WSSupplier表用于存储Web服务详细信息,如GTA,Gallileo ..

CREATE TABLE [dbo].[WSSupplier](
[SupplierID] [smallint] NOT NULL,
[SupplierName] [varchar](100) NOT NULL
)

CREATE TABLE [dbo].[City](
[CityID] [int] IDENTITY(1,1) NOT NULL,
[AppCityCode] [varchar](20) NULL,
[AppCityName] [varchar](150) NULL,
[CountryCode] [varchar](10) NULL,
[WSSupplierID] [smallint] NULL,
[WSCityCode] [varchar](20) NULL,
[WSCityName] [varchar](150) NULL
)

在第二种方法中,城市将逐行添加相应的Web服务供应商ID 如果新的Web服务到来,那么我不必修改表结构或前端应用程序。 在加载城市时,我必须使用DISTINCT在文本框中加载唯一城市或在前端下拉

在这两种方法中,我使用的是Appcitycode和Appcityname,这将加载应用程序中的城市文本框或下拉列表。在选择Appcityname时,它将获得相应的Web服务城市代码,并将其作为请求发送到Web服务以搜索特定城市的酒店。

我想知道哪种方法最好,或者有什么其他方法

2 个答案:

答案 0 :(得分:2)

第三种方法是在您的城市表和供应商表之间创建一个交叉表,列出供应商的城市代码版本。

您的城市表只有您自己的系统城市标识符。这个城市只会出现一次。每次添加供应商时,都会在交叉表中插入新记录,其中包含供应商关心的城市的城市代码。将供应商城市代码转换为内部城市代码是交叉表中的简单查找。

考虑这样的事情:

CREATE TABLE [dbo].[WSSupplier](
[SupplierID] [smallint] NOT NULL,
[SupplierName] [varchar](100) NOT NULL
)

CREATE TABLE [dbo].[City](
[CityID] [int] IDENTITY(1,1) NOT NULL,
[CityCode] [varchar](20) NULL,
[CityName] [varchar](150) NULL,
[CountryCode] [varchar](10) NULL
)

CREATE TABLE [dbo].[SupplierCityCode](
[CityID] [int] NOT NULL,
[WSSupplierID] [smallint] NULL,
[WSCityCode] [varchar](20) NULL,
[WSCityName] [varchar](150) NULL,
FOREIGN KEY [fk_city] [CityID] REFERENCES [dbo].[City],
FOREIGN KEY [fk_supplier] [WSSupplierID] REFERENCES [dbo].[WSSupplier]
)

答案 1 :(得分:0)

您的问题是关于应用程序和数据库设计。从应用程序设计的角度来看,尝试从数据库设计中抽象出来,并将其视为业务对象的一些存储。从数据库设计的角度来看,您的问题是关于数据库规范化 - 从this article at Wikipedia开始,作为数据库设计的大门。至于我:

CREATE TABLE [dbo].[Supplier](
[SupplierID] [smallint] NOT NULL,
[SupplierName] [varchar](100) NOT NULL
)

CREATE TABLE [dbo].[AppCity](
[CityID] [int] IDENTITY(1,1) NOT NULL,
[CityCode] [varchar](20) NULL,
[CityName] [varchar](150) NULL,
[CountryCode] [varchar](10) NULL,
)

CREATE TABLE [dbo].[SupplierCity](
[CityID] [int] IDENTITY(1,1) NOT NULL,
[SupplierID] [smallint] NOT NULL,
[CityCode] [varchar](20) NULL,
[CityName] [varchar](150) NULL
)