Oracle开发、SQL主键难题

Oracle开发、SQL主键难题,sql,database,oracle,database-design,Sql,Database,Oracle,Database Design,我有一个Oracle开发需求,从逻辑上看似乎不可能实现,我可以利用一些帮助来提出解决方案/解决方法 总之,我需要检测传入列值(degree_代码)是否已从供应商表中的现有列值更改。但是vendor表中现有的degree_代码值是事实主键的一个组件,因此如果传入的degree_代码不同,则无法连接到它 假设: 无法修改供应商学生信息表。 传入数据无法提供事件编号 相关表格: A.供应商学生信息表: no formal primary key, but a UNIQUE ROW can be f

我有一个Oracle开发需求,从逻辑上看似乎不可能实现,我可以利用一些帮助来提出解决方案/解决方法

总之,我需要检测传入列值(degree_代码)是否已从供应商表中的现有列值更改。但是vendor表中现有的degree_代码值是事实主键的一个组件,因此如果传入的degree_代码不同,则无法连接到它

假设: 无法修改供应商学生信息表。 传入数据无法提供事件编号

相关表格:

A.供应商学生信息表:

  no formal primary key, but a UNIQUE ROW can be found with 2 different     
  column combinations:

  1. STUDENT_ID_NUMBER/OCCURRENCE_NUMBER:

     Example:  student1, occurence1: a bunch of degree-related data
               student1, occurence2: a bunch of different degree-related 
               data 

  2. In addition a UNIQUE ROW is ALSO defined by the following DE FACTO
     PRIMARY KEY:

     STUDENT_ID_NUMBER
     <<<DEGREE_CODE>>> (MA,BA, etc., anticipated or achieved)                                                                               
     DEGREE_YEAR (anticipated or achieved)                                                             
     COLLEGE_ID  (Harvard, Yale, etc.)   
     SCHOOL_CODE (School of Law, School of Business, etc.)
     MAJOR_CODE  (Business, Astronomy, etc)                                                                                   
     START_DATE  (date enrolled)                                                                       
     END_DATE    (date degree completed)
                      row 1           row 2
                      -------------   -------------
STUDENT_ID_NUMBER     1               1
OCCURRENCE            1               2
DEGREE_CODE           BA              MA
DEGREE_YEAR           2000            2000
COLLEGE_ID            AA              AA
SCHOOL_CODE           BB              BB
MAJOR_CODE            CC              CC
START_DATE            19990131        19990131
END_DATE              20010131        20010131


STAGE/WORK table:

                      row 1
                      -------------
STUDENT_ID_NUMBER     1                 incoming data
OCCURRENCE            2                 this needs to be retrieved from STUDENT_INFO table. STUDENT_ID_NUMBER/OCCURRENCE
                                          is the key used in the vendor proprietary update process to update the STUDENT_INFO table
DEGREE_CODE           MBA               incoming data
DEGREE_YEAR           2000              incoming data
COLLEGE_ID            AA                incoming data
SCHOOL_CODE           BB                incoming data
MAJOR_CODE            CC                incoming data
START_DATE            19990131          incoming data
END_DATE              20010131          incoming data
接收、验证、处理学生学位相关数据的每日馈送,并将其加载到Oracle暂存/工作表中 通过PL/SQL

工作表中所需的事件号在传入数据中不可用,必须使用事实主键从供应商学生信息表中检索,以标识匹配行

当暂存表的加载完成后,它将连接到STUDENT_INFO表,匹配STUDENT_ID_NUMBER/事件编号以及暂存表中的更改,然后更新到STUDENT_INFO表

除了提出我的辞职,还有谁能提出解决办法吗

短暂性脑缺血发作

卢克

感谢所有回复的人

场景是:需要确定学生id编号“1”的学位代码发生变化的事实 然后在学生信息表中从“硕士”修改为“MBA”

以下是有助于澄清的示例数据:

供应商学生信息表:

  no formal primary key, but a UNIQUE ROW can be found with 2 different     
  column combinations:

  1. STUDENT_ID_NUMBER/OCCURRENCE_NUMBER:

     Example:  student1, occurence1: a bunch of degree-related data
               student1, occurence2: a bunch of different degree-related 
               data 

  2. In addition a UNIQUE ROW is ALSO defined by the following DE FACTO
     PRIMARY KEY:

     STUDENT_ID_NUMBER
     <<<DEGREE_CODE>>> (MA,BA, etc., anticipated or achieved)                                                                               
     DEGREE_YEAR (anticipated or achieved)                                                             
     COLLEGE_ID  (Harvard, Yale, etc.)   
     SCHOOL_CODE (School of Law, School of Business, etc.)
     MAJOR_CODE  (Business, Astronomy, etc)                                                                                   
     START_DATE  (date enrolled)                                                                       
     END_DATE    (date degree completed)
                      row 1           row 2
                      -------------   -------------
STUDENT_ID_NUMBER     1               1
OCCURRENCE            1               2
DEGREE_CODE           BA              MA
DEGREE_YEAR           2000            2000
COLLEGE_ID            AA              AA
SCHOOL_CODE           BB              BB
MAJOR_CODE            CC              CC
START_DATE            19990131        19990131
END_DATE              20010131        20010131


STAGE/WORK table:

                      row 1
                      -------------
STUDENT_ID_NUMBER     1                 incoming data
OCCURRENCE            2                 this needs to be retrieved from STUDENT_INFO table. STUDENT_ID_NUMBER/OCCURRENCE
                                          is the key used in the vendor proprietary update process to update the STUDENT_INFO table
DEGREE_CODE           MBA               incoming data
DEGREE_YEAR           2000              incoming data
COLLEGE_ID            AA                incoming data
SCHOOL_CODE           BB                incoming data
MAJOR_CODE            CC                incoming data
START_DATE            19990131          incoming data
END_DATE              20010131          incoming data
如果需要更多的澄清,我很乐意


Luke

可能尝试添加一些样本输入数据和预期结果。你真的很难理解你想要什么。这不是一个业务需求/用户故事,这是一个技术决策,是为了实现一个。你被这场战争折磨着。虽然你的陈述客观上是真实的,但不可能加入不存在的东西,我怀疑有一些额外的信息使这成为可能,即,只有对最新的“事件”进行修改,并且。。。你需要陈述实际要求,并提供前后数据的示例,以便得到一个合理的答案。我还建议,提出辞职可能被认为有点极端。。。我倾向于先和你的同事谈谈。当“事实”在这个上下文中没有被理解的含义时,使用“事实”是没有帮助的。要么是PK,要么不是PK,要么是候选密钥。尽可能多地使用理解意思的单词,尽可能多地努力说出你的意思。在我们找到如何表达之前,我们通常不知道自己的意思。根据您提供的信息,我们无法判断学生1,MBA学位,收到的数据必须触发事件2的更新。据我所知,这可能是一个新的事件。其余数据(学生+学院+学校+专业+开始日期)是否符合候选密钥?或者它们也可以更新吗?也许可以尝试添加一些示例输入数据和预期结果。你真的很难理解你想要什么。这不是一个业务需求/用户故事,这是一个技术决策,是为了实现一个。你被这场战争折磨着。虽然你的陈述客观上是真实的,但不可能加入不存在的东西,我怀疑有一些额外的信息使这成为可能,即,只有对最新的“事件”进行修改,并且。。。你需要陈述实际要求,并提供前后数据的示例,以便得到一个合理的答案。我还建议,提出辞职可能被认为有点极端。。。我倾向于先和你的同事谈谈。当“事实”在这个上下文中没有被理解的含义时,使用“事实”是没有帮助的。要么是PK,要么不是PK,要么是候选密钥。尽可能多地使用理解意思的单词,尽可能多地努力说出你的意思。在我们找到如何表达之前,我们通常不知道自己的意思。根据您提供的信息,我们无法判断学生1,MBA学位,收到的数据必须触发事件2的更新。据我所知,这可能是一个新的事件。其余数据(学生+学院+学校+专业+开始日期)是否符合候选密钥?或者它们也可以更新吗?