私は旅行アプリケーションに取り組んでいるので、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 サービスに送信されます。
どちらが最善のアプローチになるか、または他に良いアプローチがあるかどうかを知りたい