【问题标题】:Database designing - "1 table or 2 tables", "If 2 tables: create copy or join"数据库设计 - “1 个表或 2 个表”,“如果 2 个表:创建副本或连接”
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复,对于将所有设置的副本保存到本地(编辑或不编辑)与对全局(未编辑)和本地(已编辑)使用联合,您有何建议。选项 2a) 或 2b)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    相关资源
    最近更新 更多