我有一个名为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。
答案 0 :(得分:4)
您正在设计Many-To-Many
关系,因为config有许多服务和服务可以包含在不同的配置中。
您需要有三个表格,Config
,Service
和MappingTable
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)
是的,你是对的,你需要第三个表来存储两个表的外键。希望有帮助