2

という名前のテーブルがありますconfig。各行には、関連付けられconfigた のリストがあります。services全部で 10 個の特定のものがservicesあります。

スキーマをどのように設計すればよいですか? スキーマはconfig既に存在します。これは私の考えですが、正しい方法かどうかはわかりません。

config
===================
config_id primary key  
col-1  
col-2  
...  
col-n

新しいテーブルを導入する予定です。

serviceconfigmap 
======================================== 
config-id # foreign key to config table  
svc_id    # service identifier

このアプローチの問題は、serviceconfigmapテーブルがsvc_idそれぞれの列を複製することですconfig-id

これは正しいアプローチですか?より良いアイデアは大歓迎です

========================================

編集

One-to-Many要件をではなくと誤って呼んだことを理解していますMany-to-Many。私の質問を編集しました。

各構成には複数のサービスを含めることができ、同じサービスを異なる構成間で共有できます。

4

4 に答える 4

4

Many-To-Many構成には多くのサービスがあり、サービスは異なる構成に含めることができるため、関係を設計しています。

Configこれには 、 、Serviceおよびの 3 つのテーブルが必要です。MappingTable

Config
=========
Config_ID         => unique
Config_Name
.....

Service
=========
Service_ID        => unique
Service_Name
.....

ConfigServiceMap
==================
Config_ID         
Service_ID
.....
于 2012-10-10T05:47:55.793 に答える
2

それが純粋に私である場合、私はテーブルにを1->many追加するだけですconfig_idservices

したがって、サービステーブルは次のようになります。

service_id (primary key)
config_id (foreign key)
col1
col2
...
coln

マッピングテーブルが必要なのは、many<->many

編集

そして、これは1対多ではなく、多対多です。あなたはあなたが持っていた多対多のテーブルに固執したいかもしれませんが、構成エントリごとにサービスを複製しないように列(config_id、service_id)に主キーを置きます。

于 2012-10-10T05:42:07.277 に答える
1

現状の「config」テーブルは、繰り返しグループ(サービスごとに1つのフィールド)があるという点で、現在、最初の正規形に違反しています。新しいサービスが定義されるとどうなりますか?'config'テーブルの構造を変更する必要があります。したがって、構成とサービスの間の「結合テーブル」が標準的な方法です。

1つのサービスが複数の構成に属することができる場合は、結合テーブルが必須になります。

于 2012-10-10T05:42:48.937 に答える
1

はい、その通りです。両方のテーブルの外部キーを格納するために3番目のテーブルが必要になります。

于 2012-10-10T05:42:59.053 に答える