暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 试用商店规格?

askTom 2018-03-04
228

问题描述

我正在为实验室测试创建一个数据库。

对于常规测试,每个 [试用] 引用一个 [SpecRev],它定义了 [TrialSetup] (设备参数) 和 [TrialResultLimits] (是否符合规范)。规格有时可能会被覆盖。

对于特殊测试 (试验5%),用户输入所有 [TrialSetup] 和 [TrialResultLimits] 字段。

QUESTION:我应该如何存储用于每个 [试用] 的 [TrialSetup] 和 [TrialResultLimits]?


OPTION 1: Store a copy

每个 [试用] 都指向 [SpecRev],但也存储所使用的 [SpecRev] 字段的副本 (或 “快照”)。对于覆盖,[试用] 将被标记,用户将修改复制的字段。对于特殊测试,用户在每个字段中输入。

SpecSetup  (table): specRev_id, {TrialSetup & TrialResultLimits fields}
  | (copy)
  v
TrialSetup (table): trial_id,   {TrialSetup & TrialResultLimits fields}


OPTION 2: Reference Spec Revision

[审判] 指向 [特殊]。绝不能修改 [SpecRev],而是创建新的修订版。对于覆盖和特殊测试,将创建一个新的 [SpecRev] 并将其标记为隐藏 (不适用于将来的试用)。

从技术上讲,这些一次性的SpecRev行实际上并不是现实世界中批准的规范修订。

OPTION 3: Suggestions?


Thoughts:

1.复制数据 “感觉” 像个坏主意,但快照 “感觉” 像个好主意。不确定为什么。
2.每个 [试验] 引用 [SpecRev] 都感觉更健壮。然而,如果一个 [SpecRev] 曾经被无意中修改过,那么每个引用它的 [试验] 现在都是不正确的。

专家解答

在我看来,您存储的是两个略有不同的东西:

-试验的规范
-用于试验的设置

事实是sometimes他们是一样的,除了重点。你在存储不同的事实。因此,每个试验都应该记录自己的设置和结果限制。

您还需要存储每个规范的设置和限制。

但这意味着TrialSetup & TrialResultLimits表有两个父母!真正的试验和规范。

这被称为多态关联。

我解决这个问题的首选方法是创建一个中间表。这是真实试验和规范的父级。

这将给出一个如下的模式:

create table trials (
  trial_id int not null primary key,
  trial_type varchar2(10) not null 
    check ( trial_type in ('REAL', 'SPEC') ),
  unique ( trial_id, trial_type )
);

create table real_trials (
  trial_id int not null primary key
    references trials ( trial_id ),
  trial_type varchar2(10) not null 
    check ( trial_type = 'REAL' ),
  foreign key ( trial_id, trial_type ) 
    references trials ( trial_id, trial_type ) 
);

create table trial_specs (
  trial_id int not null primary key
    references trials ( trial_id ),
  trial_type varchar2(10) not null 
    check ( trial_type = 'SPEC' ),
  foreign key ( trial_id, trial_type ) 
    references trials ( trial_id, trial_type ) 
);

create table trail_setup (
  trial_id int not null primary key
    references trials ( trial_id ),
  
);

create table trail_result_limits (
  trial_id int not null primary key
    references trials ( trial_id ),
  
);


根据你所说的,我还会:

-禁止更新规格。如果需要更改,请创建新的试用规范。
-有一个从真实试验到跟踪规格的FK。这允许您查找哪些值被覆盖。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论