多对多关系的SQL模式
假设我有4张桌子多对多关系的SQL模式,sql,Sql,假设我有4张桌子 人 公司 团体 及 账单 现在,账单/个人与账单/公司和账单/团体之间存在多对多关系 我认为sql模式有4种可能性: 变量1(多个关系表) 人事条例草案 个人识别码 账单 公司条例草案 公司id 账单 团体条例草案 组id 账单 变量2(一个关系表具有一个id集,其他所有关系表均为空) 法案与国际关系 个人识别码 公司id 组id 账单 检查是否只能设置个人id、公司id或组id,并且所有其他两个都为空 变量3(一个关系表与另一个表的字符串引用)
- 人
- 公司
- 团体
- 账单
- 人事条例草案
- 个人识别码
- 账单
- 公司条例草案
- 公司id
- 账单
- 团体条例草案
- 组id
- 账单
- 法案与国际关系
- 个人识别码
- 公司id
- 组id
- 账单
- 法案与国际关系
- 账单
- 行id
- 行表
- 人
- 身份证
- 债务人身份证
- 公司
- 身份证
- 副部长
- 团体
- 身份证
- 副部长
- 副部长
- 身份证
- 条例草案秘书
- 账单
- 副部长
您能推荐一个变体吗?我认为变体1(多个关系表)或变体4(添加超类型表)是这里最可行的选择 变量2存储数据的效率要低得多,因为它需要为每个关系存储3个额外的空值 变体3在尝试在账单和其他某个表之间加入
时会给您带来很多麻烦,因为您无法直接这样做。您必须首先从字符串引用中选择表名,然后将其插入到第二个查询中。任何类型的SQL注入都会使数据库遭受SQL注入攻击,因此最好尽可能避免这些攻击
在我看来,变体1可能是1和4中最好的一个,因为它将在查询中减少一个连接,从而使它们更简单。但是,如果所有的表都被正确地索引,我认为这两个表之间的性能(或空间效率)不会有太大差异。变体1(多个关系表)最合适。它很容易管理。我建议使用变体1。