2013-02-12 2 views
0

У меня есть таблица, называемая служебной записью. В служебной записи могут быть несколько частей. Таким образом, часть входа в службу таблицы будет содержать строку для каждой части. Детали хранятся в таблице деталей. Таблица входа службы имеет разделитель с запятой, который содержит информацию о деталях, используемую для отображения на странице.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 

Так что, если вы смотрите на выше части таблицы Что происходит в том, что таблица часть в настоящее время обновлено. Новые части будут добавлены, а для существующих частей их идентификаторы будут обновлены до новых идентификаторов, а также могут быть новые описания деталей. Как вы могли видеть, таблица записей службы с описанием части столбца не будет синхронизироваться для записи службы, которая была создана ранее. То, что я пытаюсь сделать, - это обновить существующую таблицу элементов входа службы с новыми идентификаторами частей и их dcescriptions и, наконец, обновить столбец, названный описанием части в таблице ввода службы. Обновление таблицы компонентов входа в систему прост, но проблема в том, как обновить столбец с разделителем в таблице записей службы.

+4

Кажется, вы до сих пор хорошо себя чувствуете. Однако я не вижу реального вопроса. –

+0

извините, вопрос идет к концу, просто нужна помощь с SQL для обновления таблицы, например, для просмотра желаемых данных. спасибо –

+2

'Очень важно ради нормализации ...' Разве вы не имеете в виду де-нормализацию? В нормализованной базе данных описание детали появится в таблице «Детали», и только PartId появится в других таблицах. – Tim

ответ

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_SERVICES, связанных с UNIT. Может быть нулевой, один или несколько SERVICE_PARTS, связанных с SERVICE.

В нормализованной базе данных каждая часть, используемая при обслуживании устройства, будет существовать в своей строке в таблице SERVICE_PART. Мы не нашли бы двух или более частей в одном кортеже SERVICE_PART, разделенных каким-то разделителем, как это обычно делалось в так называемых многозначных базах данных, которые были предшественниками современной OODBMS.

+0

. Запись службы имеет 1: много отношений с таблицей компонентов службы. В одной служебной записи может быть несколько частей. Поэтому, если в записи службы есть несколько частей, таблица с частью служебной записи будет содержать несколько строк в строке ввода служебной информации, а каждая строка содержит информацию о отдельной детали. Проблема в том, что я пытаюсь обновить свои части новыми деталями, означающими, что существующие части будут иметь новые идентификаторы вместо старых идентификаторов, а в описании существующей части будут описаны новые описания деталей. Таким образом, вы могли видеть, запись записи службы, которая была создана до этого, должна обновляться с новой информацией о детали. –

+0

Я обновил вопрос. Извиняюсь. Теперь это должно быть намного яснее. –

+0

'Я пытаюсь обновить свои детали новыми деталями ... у существующих частей будут новые идентификаторы. Это тоже не нормализованный способ, но вы можете сделать это следующим образом: добавьте несколько новых столбцов: newid, newdescription для ваших Таблица основных компонентов и ваши дочерние таблицы. Затем обновите дочерние таблицы новыми значениями из главной таблицы, присоединившись к OLD-идентификатору. Отбросьте все ограничения FK. Отбросьте старые столбцы. Восстановите новые ограничения FK. Ваша проблема - РЕЗУЛЬТАТ денормализованного подхода. Идентификаторы никогда не должны меняться! Кардинальное правило. Код детали, который может измениться, является бесполезным кандидатом на первичный ключ. – Tim