首页 > 解决方案 > 数据库设计 - “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}

问题 哪一个是更好的选择?有没有其他方法可以处理这个问题?

标签: sqlsql-serverdatabase-design

解决方案


我认为最好有两个不同的表,这样您可以更好地控制数据并提高系统效率。


推荐阅读