약간의 추가 작업 외에도 작업 수행 방식에 별다른 문제가 없습니다. 자식 객체의 삭제 및 재 작성은 일반적인 방법입니다.
실제로 자동 증가 숫자가 올라 갔는지는 중요하지 않습니다. 모든 작업 표 항목은 해당 작업 표 외부 키를 통해 검색 할 수 있어야합니다.
자동 생성 된 숫자에 의존해서는 안됩니다. ID 필드가 올라가는 것은 중요하지 않습니다. 실제 솔루션은 서로 게이트 키가 무엇인지에 상관없이 올바르게 검색 할 수있는 일관된 방법을 찾는 것입니다.
사용자의 의견에 따라 편집
.
당신은 여전히 PK와 FK를 위해 자동 번호를 사용할 것이지만, 큰 물건을 유일하게 식별하는 방법과 결합해야합니다. 이것은 보통 물건 그래프 상단의 물건입니다.
데이터베이스에 별칭 열을 포함시켜 구현합니다.
이것은 명시 적으로 조회하고자하는 모든 항목에 적용되는 고유 한 varchar 제약 조건입니다.
다음 예제를 고려하십시오. 내가 처음부터 DB를 재 구축해야하는 경우 그 변경 될 수 있기 때문에
CREATE TABLE OrderTypes
(
Id INT IDENTITY(1,1) PRIMARY KEY,
Name varchar(100),
Alias varchar(30),
Active bit,
...
)
는 이제 이드에 의해 OrderType
을보고 싶지 않아요.
이름으로 OrderType
을 조회하고 싶지 않습니다. 누군가가 CMS 기능을 통해 주문 유형을 변경하면 어떻게됩니까?
별칭 개념을 사용하면 각 주문 유형에 (관리 화면) 중에서 편집 할 수없는 짧은 이름을 지정할 수 있습니다.
계속 하시겠습니까? 예를 들어, 주문서에 "purchaseorder
"의 별칭과 "salesorder
"의 별칭을 판매 주문서 및 별칭으로 제공 할 수 있습니다.
이 시점에서
SELECT * FROM OrderTypes WHERE Alias = 'salesorder'
, 쿼리가 자동으로 생성 된 ID를 가지고, 그래서 당신은 더 쿼리를 만들 수 있습니다 -이 : 나는 판매 주문에 관한 OrderType 행을 취득 할 때
, 그때 사용할 수 있습니다 그 가치에 따라.
SELECT * FROM Orders WHERE OrderTypeId = <that value I just safely derived>
자동 생성 ID는 하드 코딩보다 훨씬 더 나은 방법입니다.
감사합니다. 내가 볼 수있는 방법은 비록 내가 작업 표의 일부가 아니었지만 삽입되어있는 새로운 항목을 삽입해야 할 수도 있습니다, 더 이상 작업 표의 일부가 아니라 마지막으로 변경된 것들을 삭제할 수 있습니다 데이터 액세스 레이어에 너무 많은 작업이 있습니까? – user1012598
IMHO, 그런 작업은 DA 계층이 아니라 비즈니스 계층에 있어야합니다 ... –
당신이 제안하는 것이 정말 재미 있습니다 ... BLL은 작업의 Timesheet.Save() 유형에 대해서만 걱정해야한다는 인상하에있었습니다. 그런 다음이 DB 작업을 조정하기 위해 하위 계층 (예 : 서비스 계층 또는 데이터 액세스 계층)의 메서드를 호출합니다. – user1012598