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. 编辑了我的问题。

每个配置可以有多个服务,并且可以在不同的配置之间共享相同的servoce。

4

4 回答 4

4

您正在设计Many-To-Many关系,因为配置有许多服务,并且服务可以包含在不同的配置中。

您需要为此准备三个表ConfigServiceMappingTable

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_id在表中添加一个services

所以你的服务表看起来像

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

如果是,您只需要一个映射表many<->many

编辑

那么这不是一对多,而是多对多。您可能希望坚持使用多对多表,但在列 (config_id, service_id) 上放置一个主键,以免每个配置条目重复服务。

于 2012-10-10T05:42:07.277 回答
1

目前的“配置”表违反了第一种标准形式,因为它具有重复组(每个服务一个字段)。定义新服务时会发生什么?您将不得不更改“配置”表的结构。因此,配置和服务之间的“连接表”是标准方法。

如果一个服务可以属于多个配置,那么连接表就成为必须的。

于 2012-10-10T05:42:48.937 回答
1

是的,你是对的,你需要第三个表来存储两个表的外键。希望有帮助

于 2012-10-10T05:42:59.053 回答