1

私は旅行アプリケーションに取り組んでいるので、GTA、Gallileo、Kuoni などのさまざまな Web サービスに対処する必要があります。ホテルの詳細に関する情報を取得するため。各 Web サービスには、都市コードと都市名の独自のリストがあります。さまざまな Web サービスから都市の詳細を格納するテーブルを設計したいのですが、いくつかの調査の後、これら 2 つのアプローチにたどり着きました

最初のアプローチ

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 サービスに対応する 2 つの列 (都市コードと都市名) が追加され、ストアド プロシージャとフロントエンド アプリケーション コードが変更されます。テキストボックスに都市をロードする際に重複はありません

第 2 のアプローチ WSSupplier テーブルは、GTA、ガリレオなどの Web サービスの詳細を格納するために使用されます。

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
)

2 番目のアプローチでは、対応する Web サービス サプライヤー ID を使用して行ごとに都市が追加されます。新しい Web サービスが提供された場合、テーブル構造やフロントエンド アプリケーションを変更する必要はありません。都市をロードする際に、DISTINCT を使用して、フロントエンドのテキスト ボックスまたはドロップダウンに一意の都市をロードする必要があります

両方のアプローチで、私は Appcitycode と Appcityname を使用しています。これにより、都市のテキスト ボックスまたはドロップダウンがアプリケーションに読み込まれます。Appcityname を選択すると、対応する Web サービスの都市コードが取得され、特定の都市のホテルを検索するための要求として Web サービスに送信されます。

どちらが最善のアプローチになるか、または他に良いアプローチがあるかどうかを知りたい

4

2 に答える 2

2

3番目のアプローチは、都市テーブルとサプライヤーテーブルの間に、サプライヤーのバージョンの都市コードをリストする交差テーブルを作成することです。

都市テーブルには、独自のシステムの都市識別子が含まれます。街は一度だけ現れるでしょう。サプライヤを追加するたびに、サプライヤが関心を持っている都市の都市コードを含む新しいレコードを交差テーブルに挿入します。サプライヤの都市コードから内部の都市コードへの変換は、交差テーブルでの単純なルックアップです。

次のようなことを考えてみてください。

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

あなたの質問は、アプリケーションとデータベースの設計に関するものです。アプリケーション設計の観点から、データベース設計を抽象化し、それをビジネス オブジェクトのストレージと考えてください。データベース設計の観点から、あなたの質問はデータベースの正規化に関するものです。データベース設計の大きな世界への入り口として、ウィキペディアのこの記事から始めてください。私としては:

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 に答える