Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.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
sql规范化表_Sql - Fatal编程技术网

sql规范化表

sql规范化表,sql,Sql,我有一个叫做服务条目的表。在一个服务条目中可能有多个部分。因此,表服务条目部分的每个部分都有一行。零件存储在零件表中。服务条目表有一个逗号分隔列,其中包含用于在页面上显示的零件信息 Dbo.部分 ID PartDescription 270 Syringe assembly 282 LPH pcb 287 Valve block assembly ID PartDescription OldID 331 Syringe assembly 270 335

我有一个叫做服务条目的表。在一个服务条目中可能有多个部分。因此,表服务条目部分的每个部分都有一行。零件存储在零件表中。服务条目表有一个逗号分隔列,其中包含用于在页面上显示的零件信息

Dbo.部分

ID   PartDescription
270  Syringe assembly
282  LPH pcb 
287  Valve block assembly 
ID   PartDescription       OldID
331  Syringe assembly      270
335  LPH pcb               282
336  Valve block assembly  287
Dbo.ServiceEntry

ServiceEntryID, Description
     1200         270 ~ Syringe assembly  ~ 7,3 ~ Increase drive current from 3 --> 1.|282 ~ LPH pcb ~ 8 ~  | 287 ~ Valve block
   assembly ~ null ~
以上为立柱的结构:

PartID ~ PartDescription ~ ServiceType ~ Comment
对于多个部件,将添加此字符
|
,并重复该结构

ServiceEntryPart

ID  ServiceEntryID   PartID  ServiceTypev Comment
1    1200            270      7,3         Increase drive current from 3
2    1200            282      8          
3    1200            287      null    
问题

Dbo.部分

ID   PartDescription
270  Syringe assembly
282  LPH pcb 
287  Valve block assembly 
ID   PartDescription       OldID
331  Syringe assembly      270
335  LPH pcb               282
336  Valve block assembly  287

因此,如果您查看上面的零件表,发生的是零件表正在更新。将添加新零件,对于现有零件,其ID将更新为新ID,并且可能有新零件说明。如您所见,包含列部件描述的服务条目表对于之前创建的服务条目将不同步。我试图做的是用新的部件ID及其dcdescription更新现有的service entry部件表,最后更新service entry表中名为part description的列。更新服务条目部分表很简单,但问题是如何更新服务条目表中的delimetered列。

如果我理解正确,您使用的是包含多个分隔值的列(如PICK数据库):

通常,在规范化数据库中,用户将具有:

UNIT  (something that might need service or repair)
UnitId  PK
UnitDescription

PARTS  (repair / replacement parts)
PartId PK
PartDescription

UNIT_SERVICES  (instances of repair visits/ service)
ServiceID   int primary key
UnitId      foreign key references UNIT
ServiceDate
TechnicianID
etc


SERVICE_PART   (part used in the service)
ID          primary key
ServiceID   foreign key references SERVICE
PartID      foreign key references PART
Quantity
可能有零个、一个或多个与单元相关联的单元服务。 可能有零个、一个或多个与服务关联的服务部件


在规范化数据库中,用于单元维修的每个零件都将存在于维修零件表中自己的行中。我们不会在同一个SERVICE\u PART元组中找到两个或多个由分隔符分隔的部分,就像在所谓的多值数据库中通常做的那样,多值数据库是现代OODBMS的前身。

到目前为止,您似乎做得很好。不过我没有看到实际的问题。对不起,问题快结束了,只需要一些SQL帮助来更新表,例如查看所需的数据。非常感谢
为了规范化…
您的意思是为了反规范化吗?在规范化数据库中,零件描述将显示在零件表中,而只有PartId将显示在其他表中。PartId在ServiceEntryID中是否具有相同的零件描述?如果您可以创建一个具有ID和描述的零件表,这将变得容易得多。问题是我在用新零件更换零件,好的。现有零件将替换为新零件,即新零件ID和零件说明。正如您所看到的,以前创建的服务条目记录将不会与新零件保持同步。所以,我试图找出一种方法来更新该列,如果possibleService条目与service entry part表有1:many关系的话。一个服务条目中可能有多个部件。因此,如果一个服务条目中有多个零件,那么服务条目零件表将有多个服务条目零件行,每一行包含单个零件信息。问题是,我正在尝试用新零件更新我的零件,这意味着现有零件将有新的ID而不是旧的ID,并且现有零件描述将有新的零件描述。您可以看到,以前创建的服务条目记录需要使用新的零件信息进行更新。我更新了问题。道歉。现在应该更清楚了。
我正在尝试用新零件更新我的零件…现有零件将有新ID。
这也不是标准化的方法,但您可以按如下方式进行:向零件主表和子表添加一些新列:newid、newdescription。然后使用主表中的新值更新子表,在旧id上连接。删除所有FK约束。删除旧列。重新创建新的FK约束。您的问题是非规范化方法的结果。ID永远不应该改变!基本规则。可以更改的部分代码对于主键来说毫无价值。很酷,我将添加列,这只是我如何更新服务条目表中被删除的列。做
似乎很痛苦…做
似乎很痛苦。对的