2011-09-14 4 views
0

고정 폭 파일에 포함 된 판매를 가져와 일부 테이블에 저장하는 C# WinForms 응용 프로그램이 있습니다. 테이블은 구조가 동일하지만 데이터베이스 내의 다른 스키마에 있습니다.PostgreSQL 데이터베이스에 데이터를 저장하기위한 올바른 스키마를 자동으로 찾는 방법은 무엇입니까?

현재 응용 프로그램에서 각 판매 데이터를 저장하는 두 개의 쿼리를 실행합니다. 하나는 데이터를 저장할 올바른 스키마를 가져오고 다른 하나는 실제로 테이블에 삽입하는 것입니다.

사례를 더 잘 설명하기 위해 Sales 테이블이있는 주 스키마와 여러 스키마 (자국의 각 지역마다 하나씩)에 클라이언트 테이블이 있다고 가정 해 보겠습니다. 각 판매의 고객 ID를 사용하여 올바른 판매점 스키마를 찾습니다.

이 과정을 최적화해야합니다. 빨리 처리해야합니다. 필자는이 응용 프로그램의 프로파일을 작성했으며이 두 가지 쿼리는 가장 시간이 많이 걸리는 단계입니다. 내 응용 프로그램 내에서 단일 명령을 실행하고 데이터베이스에 올바른 스키마를 찾는 작업을 떠나는 것이 도움이 될 것 같습니다.

INSERT INTO 
    (SELECT clients.schema_name FROM main.clients WHERE client_id = @client_id).sales 
    (client_id, qty, value) 
VALUES 
    (@client_id, @qty, @value) 

명확하게하지 않습니다 작품 :

나는 이런 식으로 뭔가를 달성하고 싶다. SQL에 대해서 잘 모르겠다. 기초는 있지만 단일 명령으로는 불가능하다고 나는 생각한다. 저장 프로 시저가 필요하다.

데이터베이스 구조를 변경하는 것과 관련하여 오랫동안 이에 대한 지침이나 더 나은 솔루션을 듣고 싶습니다.

답변

1

데이터베이스가 손상되어 문제를 피하는 것이 장기적으로 가치가 없을 것입니다. 관심이 있다면, 그런 스키마를 사용하여 유지 보수 문제를 지적하는 것은 어렵지 않습니다.

즉, C# 코드에서 client_id -> schema_name을 캐시하고 대부분의 쿼리가 해당 정보를받지 않도록합니다.

SP를 작성하여 작성할 수도 있지만 동적 SQL 쿼리 또는 이와 유사한 해킹을 작성해야 할 수 있습니다.

+0

그래, 내 데이터베이스에 결함이 있다는 것을 알고있다. 이것은 그 중 하나 일 뿐이다. 이미 많은 모듈이 있기 때문에 문제를 해결할 여유가 없습니다. 나는이 프로젝트에 참여하여 개발의 후반기에 접어 들었고, 데이터베이스는 이미 내가 아는 것보다 데이터베이스 설계가 훨씬 더 나쁜 사람에 의해 이미 정의되었다. –

+0

나는 판매를 가져 오기 전에 각 고유 한 client_id에 대해 하나의 쿼리를 실행하고 저장하고 사전에 해당 스키마를 저장한다고 말한 것을 끝냈습니다. 각 파일을 약 50 %까지 가져 오는 시간을 줄이기 위해 관리되었습니다. 당신의 대답을 받아 들일 것입니다. 감사. –

관련 문제