OCL로 변환하려는 SQL 부분이 있습니다. 나는 SQL이 좋지 않아서 이것으로 유지 보수성을 높이고 싶다. 우리는 Interbase 2009, Delphi 2007을 대담하고 모델이 적용된 개발과 함께 사용하고 있습니다.SQL을 OCL로 변환 하시겠습니까?
Select Bold_Id, (Select Parcel.MCurrentStates From Parcel
where ScaniaEdiSolMessage.ReceivingOwner = Parcel.Bold_Id) From ScaniaEdiSolMessage
Where MessageType = 'IFTMBP' and not Exists (Select * From ScaniaEdiSolMessage
EdiSolMsg Where EdiSolMsg.ChassieNumber = ScaniaEdiSolMessage.ChassieNumber and
EdiSolMsg.ShipFromFinland = ScaniaEdiSolMessage.ShipFromFinland and
EdiSolMsg.MessageType = 'IFTMBF') and invalidated = 0
참고 : 작은 단순화 후
Select Bold_Id, MessageId, ScaniaId, MessageType, MessageTime, Cancellation, ChassieNumber, UserFriendlyFormat, ReceivingOwner, Invalidated, InvalidationReason,
(Select Parcel.MCurrentStates From Parcel
Where ScaniaEdiSolMessage.ReceivingOwner = Parcel.Bold_Id) as ParcelState From ScaniaEdiSolMessage
Where MessageType = 'IFTMBP' and
not Exists (Select * From ScaniaEdiSolMessage EdiSolMsg
Where EdiSolMsg.ChassieNumber = ScaniaEdiSolMessage.ChassieNumber and EdiSolMsg.ShipFromFinland = ScaniaEdiSolMessage.ShipFromFinland and EdiSolMsg.MessageType = 'IFTMBF') and
invalidated = 0 Order By MessageTime desc
: 이제 내 희망은 여기에 두 사람이 :-) 원래 SQL 좋은 SQL과 OCL을 말하는 것입니다 메세지 유형 2 가지 경우가 있습니다 , 'IFTMBP'및 'IFTMBF'로 구성됩니다.
그래서 나열 할 테이블은 ScaniaEdiSolMessage입니다.
- 메세지 유형 : 문자열
- ChassiNumber : 문자열
- ShipFromFinland : 부울
- 무효화 : 이 같은 속성이 부울을
또한 함께 ReceivingOwner라는 이름의 테이블 소포에 대한 링크가 키로 굵게 표시.
그래서 ScaniaEdiSolMessage의 모든 행을 나열한 다음 ScaniaEdiSolMessage의 모든 행을 나열하고 EdiSolMsg라는 이름의 하위 쿼리가있는 것처럼 보입니다. 그런 다음 거의 모든 행을 제외합니다. 실제로 위의 쿼리는 28000 개의 레코드에서 한 번의 히트를 제공합니다.
ScaniaEdiSolMessage.allinstances->select(shipFromFinland and not invalidated)
하지만 난에 OCL을하는 방법을 이해하지 않습니다
또한ScaniaEdiSolMessage.allinstances
쉽게 예를 들어 선택에 의해 행을 필터링 :
OCL에서는 모든 인스턴스를 나열하기 쉽다 위의 SQL과 일치하십시오.
당신은 어떤 스카니아 트럭 물건을하고있다 :) 은 무엇 당신이 원하는 것은없는 것 같다 : 그들은 우리가 그것을 비트를 줄일 수 있다는보고
그리고이 원하는 결과를 얻을 수 있습니다 그래서 나에게 잘해. 우선 SQL은 객체 지향 환경에서 1 차 술어에 대한 관계 대수와 OCL을 기반으로합니다. 이것은 그들로 하여금 세상을 다른 시각으로 바라 보게합니다. 예 : SQL에서의 간단한 탐색은 선택 및 결합에 관한 것입니다. OCL에서는 한 객체에서 다른 객체로의 연결을 수행합니다. 개체 지향 및 관계형 불일치로 인해 앞으로 많은 문제가 발생할 수 있습니다. –
예, 응용 프로그램에 일부 트럭이 있습니다. 많은 SQL 표현식이 객체 지향적이라 할지라도 OCL로 변환하기가 상대적으로 쉽습니다 (OCL은 사물을 필터링 할 수도 있음). 어떤 종류의 불일치 문제를 생각하고 있는지 알 수는 없지만 OCL에서는 가능한 한 많이 원합니다. –
당신이 가지고있는 것을 유지하기 위해 적어도 충분한 SQL을 배우지 않겠습니까? 나는 가브리엘에 동의한다. 또는 SQL 대신 OCL을 사용하는 데이터베이스를 찾을 수도 있습니다. –