多对多关系数据库设计

时间:2012-10-10 05:39:27

标签: sql foreign-keys schema entity-relationship

我有一个名为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 个答案:

答案 0 :(得分:4)

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

您需要有三个表格,ConfigServiceMappingTable

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

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

ConfigServiceMap
==================
Config_ID         
Service_ID
.....

答案 1 :(得分:2)

如果它纯粹是1->many,我只会在表config_id

中添加services

所以你的服务表看起来像

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

如果是many<->many

,您只需要一个映射表

修改

然后这不是一对多,而是多对多。您可能希望坚持使用多对多的表,但是将一个主键放在列(config_id,service_id)上,以便不重复每个配置项的服务。

答案 2 :(得分:1)

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

如果一个服务可以属于多个配置,则必须使用连接表。

答案 3 :(得分:1)

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