1

我正在开发旅行应用程序,所以我们必须处理不同的网络服务,如 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 服务以搜索特定城市的酒店。

我想知道哪个是最好的方法,或者是否有其他好的方法

4

2 回答 2

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]
)
于 2013-02-07T13:21:38.027 回答
0

您的问题是关于应用程序和数据库设计的。从应用程序设计的角度尝试从数据库设计中抽象出来,并将其视为您的业务对象的一些存储。从数据库设计的角度来看,您的问题是关于数据库规范化 - 从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
)
于 2013-02-07T13:53:47.427 回答