【发布时间】:2021-11-29 07:49:05
【问题描述】:
我将在表中存储不同性质的相同结构的数据。
场景:将有一个数据模板,将在注册时显示给客户。
注册后,客户可以编辑详细信息并将其保存为本地设置。这不会影响最初向客户显示的全局模板设置。
我现在几乎没有选择。
选项#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}
问题 哪一个是更好的选择? 有没有其他方法可以处理?
【问题讨论】:
标签: sql sql-server database-design