Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 根据新需求重构数据库和应用程序_Oracle_Database Design_Refactoring - Fatal编程技术网

Oracle 根据新需求重构数据库和应用程序

Oracle 根据新需求重构数据库和应用程序,oracle,database-design,refactoring,Oracle,Database Design,Refactoring,我的应用程序管理客户的投诉,并已部署到生产中。每个投诉都有一个代码来识别它(对于eaxmple“延迟交付”)、一个“部门”类型(本质上是负责此类投诉的部门)和另一个“模型”代码,用于识别该投诉档案必须遵循的部门员工路线(首先是人力资源部负责人,然后是人力资源部大老板,最后是客户服务部)。每个档案都有一些通用信息,可以有部门特定信息,这就是我需要部门代码的原因。 例如,客户服务部收到关于呼叫中心接线员“粗鲁”的投诉,打开代码为ABC的档案并键入“HR”(可能有更多的HR档案类型)。当客户服务部填写

我的应用程序管理客户的投诉,并已部署到生产中。每个投诉都有一个代码来识别它(对于eaxmple“延迟交付”)、一个“部门”类型(本质上是负责此类投诉的部门)和另一个“模型”代码,用于识别该投诉档案必须遵循的部门员工路线(首先是人力资源部负责人,然后是人力资源部大老板,最后是客户服务部)。每个档案都有一些通用信息,可以有部门特定信息,这就是我需要部门代码的原因。 例如,客户服务部收到关于呼叫中心接线员“粗鲁”的投诉,打开代码为ABC的档案并键入“HR”(可能有更多的HR档案类型)。当客户服务部填写完所有信息后,将其转发给HR(向系统中配置为HR负责人的用户发送邮件)。人力资源部员工填写自己的部分并将其发送回客户服务部

到目前为止,每个投诉代码可能只有一个部门和一个型号,现在要求已经改变,我有两个问题:

  • 有些投诉由相同的代码识别,但可能是由不同的部门引起的。例如,有关员工粗鲁行为的投诉可以发送给负责呼叫中心的部门或负责物流的部门
  • 我可以简单地将表主键扩展到包含部门(希望他们不会决定同一部门的相同代码可以遵循不同的路线)来解决这个问题,更改应用程序代码可能有点痛苦,但可以做到:

    将主键扩展到复合键在Oracle中是一个问题,还是对现有记录有副作用?实际主键不作为外键使用,所有字段都已填充

  • 这是一个相当困难的问题(至少对我来说):营销部门(统治者)需要一个特殊的档案。他们监控部门回答投诉的时间,如果超过标准时间,则打开一种新的档案。 对于上面的例子,如果人力资源部总是需要30%以上的时间来完成员工粗鲁行为档案,营销部可以打开一个“查询”档案,直接向人力资源部查询投诉代码。
    现在,参考第1点,我可以为每个投诉代码添加一条新记录,其中键的第二部分是营销代码,并将其关联到一个新模型。这将使表的行数翻倍(已经相当大)。我认为插入新投诉代码非常容易出错
  • 我知道在看不到模式和代码的情况下很难给出意见,但无论如何我都会感谢你的意见

    “将主键扩展到 复合密钥是Oracle中的一个问题 或对现有产品有副作用 记录?实际主键不是 用作外键anywere和all 字段已填充。”

    Oracle允许我们拥有复合主键。从关系的角度来看,它们不是问题

    对主复合键的唯一反对意见是通常的反对意见,即它们使外键关系和联接更加繁琐。您说您目前没有引用此表的外键。不过,我建议您定义一个合成(代理)主键使用索引,并强制复合键作为唯一约束。因为将来很可能会有外键:您的困境表明您当前的数据模型不正确,或者至少不完整

    “我可以为每一张专辑增加一张新唱片 具有第二部分的投诉代码 “关键是营销代码”

    智能钥匙是哑的。如有必要,为营销代码添加一个单独的列。如果营销人员打开他们自己的档案,这将被填充。我不明白为什么它需要与投诉代码关联或构成任何主键的一部分(营销代码查找表除外)

    我承认我不完全理解您的数据模型或业务逻辑,因此以下可能是错误的。但是,我认为您需要的是一个可以有两种档案类型的表格档案:

    • 由部门代码和投诉代码确定的正常档案
    • 营销档案,我认为可以通过部门代码、投诉代码和营销代码识别
    唯一约束允许空列,因此营销_代码可以是可选的。这是使用一个而不是复合主键的另一个优点

    “我认为它对于用户来说非常容易出错 插入新的投诉代码。”

    您的意思是创建新投诉?还是新投诉类型?创建新投诉不应该是问题:创建普通档案的过程将提供营销代码为空的投诉代码选择,而创建营销档案的过程将提供营销代码不为空的投诉代码选择

    如果你在谈论添加新的投诉类型,那么我想问题是:每个常规投诉代码是否必须有一个单独的营销代码?我怀疑没有。在这种情况下,你可能需要一个代码类型,而不是营销代码-价值观正常或营销

    “将主键扩展到 复合密钥是Oracle中的一个问题 或对现有产品有副作用 记录?实际主键不是 用作外键anywere和all 字段已填充。”

    Oracle允许我们拥有复合主键。从关系的角度来看,它们不是问题

    对主复合键的唯一反对意见是通常的反对意见,即它们使外键关系和联接更加繁琐。您说您目前没有引用此表的外键。不过,我建议您定义一个合成(代理)主键使用索引,并强制复合键作为唯一约束。因为