sql规范化表

时间:2013-02-12 20:30:11

标签: sql

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

Dbo.Part

ID   PartDescription
270  Syringe assembly
282  LPH pcb 
287  Valve block assembly 

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.Part

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

因此,如果您查看上面的部分表,发生的事情是部件表正在更新。将添加新零件,对于现有零件,它们的ID将更新为新的ID,并且可能会有新的零件描述。如您所见,具有列部分描述的服务条目表将不会与之前创建的服务条目同步。我要做的是使用新的部件ID及其dcescriptions更新现有的服务条目部件表,最后更新服务条目表中名为部件描述的列。更新服务条目部分表很简单,但问题是我如何更新服务条目表中的delimeted列。

1 个答案:

答案 0 :(得分:0)

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

`For multiple parts, this character | is added and the structure is repeated.`

通常,在规范化的数据库中,可以有:

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

可能存在与UNIT关联的零个,一个或多个UNIT_SERVICES。 可能存在与SERVICE关联的零个,一个或多个SERVICE_PARTS。

在规范化数据库中,单元服务中使用的每个部分都将存在于SERVICE_PART表中的各自行中。我们在同一个SERVICE_PART元组中找不到两个或多个部分,用一些分隔符分隔,就像在所谓的多值数据库中一样,它们是现代OODBMS的前身。