sql - 数据库设计 - “1 个表或 2 个表”,“如果 2 个表:创建副本或连接”
问题描述
我将在表中存储相同结构的不同性质的数据。
场景:将有一个数据模板,将在注册时显示给客户。
注册后,客户可以编辑详细信息并将其保存为本地设置。这不会影响最初向客户显示的全局模板设置。
我现在几乎没有选择。
选项 #1:我可以将所有全局和本地设置存储在一张表中
对于客户注册页面
select * from Settings where RegistrationID is null
用于检索客户设置
select * from Settings where RegistrationID = {RegID}
因此,每次新客户来注册时,系统都会使用这个不断增长的表格来检索模板(全局)设置
选项#2:将全局和本地设置存储在单独的表中这将具有以下更多选项
2.a) 复制 local.Settings 表中的所有用户设置供用户检索。在这种情况下,系统将只引用一个表。每次注册都会有很多重复。
select * from local.Settings where RegistratioID = '{RegID}'
2.b) 仅在 local.Settings 表中存储已编辑的设置,并为 local.RegistrationSettings(RegistrationID,SettingID) 创建另一个表以处理一对多关系。在这种情况下,系统需要在 global.Settings 和 local.Settings 上使用 union 语句。此外,我将不得不考虑在两个表上设置 ID 的唯一性,如果我为两个表定义一个范围,我认为这是可以管理的。
select * from
((select * from global.Settings) union all (select * from local.Settings where RegistationID = {RegID})) as s
inner join RegistrationSettings as r on r.SettingID = s.ID where r.RegistrationID = {RegID}
问题 哪一个是更好的选择?有没有其他方法可以处理这个问题?
解决方案
我认为最好有两个不同的表,这样您可以更好地控制数据并提高系统效率。
推荐阅读
- mysql - Like 语句中的 SQL 反斜杠 - 正确使用
- python - Pandas 说每一列都是一个对象,尽管我认为它是一个整数
- python - python中是否有“if not<”或“if not >”命令?
- node.js - node js npm包安装未完成
- python - readAll() 或 readAllStandardOutput() 在执行之前也返回一个空字符串
- amazon-web-services - 尝试绑定地址时出错 ('0.0.0.0' 443) 权限被拒绝 aws
- r - R中的Mapview和太平洋地区的预测/ crs问题
- javascript - 在 Google 表格上使用 JavaScript 获取 URL 响应代码
- kdb - 给定一个现有表,生成用于定义具有相同架构的空表的代码
- azure - 删除子网失败