sql规范化表
我有一个叫做服务条目的表。在一个服务条目中可能有多个部分。因此,表服务条目部分的每个部分都有一行。零件存储在零件表中。服务条目表有一个逗号分隔列,其中包含用于在页面上显示的零件信息 Dbo.部分sql规范化表,sql,Sql,我有一个叫做服务条目的表。在一个服务条目中可能有多个部分。因此,表服务条目部分的每个部分都有一行。零件存储在零件表中。服务条目表有一个逗号分隔列,其中包含用于在页面上显示的零件信息 Dbo.部分 ID PartDescription 270 Syringe assembly 282 LPH pcb 287 Valve block assembly ID PartDescription OldID 331 Syringe assembly 270 335
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永远不应该改变!基本规则。可以更改的部分代码对于主键来说毫无价值。很酷,我将添加列,这只是我如何更新服务条目表中被删除的列。做似乎很痛苦…做似乎很痛苦。对的