현재 기름 분포 관리 프로젝트를 진행하고 있으며 모든 청구서의 영수증이 필요합니다. 데이터 베이스. 나는 도시의 처음 2 글자, 주유소 ID, 자동 증분 번호, 달의 첫 번째 글자 및 한 해의 마지막 두 자리를 포함하는 영수증을위한 스마트 키를 작성하려고 생각하고 있습니다. 따라서 다소 비슷할 것입니다 : "AA-3-0001-J15". 내가 궁금해하는 것은 달이 바뀔 때 0001로 돌아가는 AI 번호를 만드는 방법입니다. 어떤 제안?월말에 자동 증분 값을 재설정하는 스마트 키를 만드는 방법
답변
직접 질문에 답하려면 - 월 초에 숫자를 1로 다시 시작하는 방법.
단순한 IDENTITY
열이 아니므로 직접이 기능을 구현해야합니다.
이러한 복잡한 값을 생성하려면 사용자 정의 함수 또는 저장 프로 시저를 작성해야합니다. 테이블에 새 행을 삽입하기 위해 키의 새 값이 필요할 때마다이 함수를 호출하거나이 저장 프로 시저를 실행합니다.
두 개의 다른 세션이 동시에 행을 삽입하려고 할 때 함수/저장 프로시 저는 제대로 작동하는지 확인해야합니다. 가능한 한 가지 방법은 sp_getapplock
을 사용하는 것입니다.
"자동 증가"숫자가 모든 도시와 주유소의 단일 순서인지 또는 각 도시와 주유소의 일련 번호인지 여부를 명확히하지 않았습니다. 같은 달에 모든 도시와 주유소에 대해 일련의 숫자가 하나 있다고 가정합시다. 달이 변경되면 시퀀스가 다시 시작됩니다.
프로 시저를 실행할 때 다음 질문에 대답 할 수 있어야합니다. 현재 달의 첫 번째 행을 삽입하려는 행이 있습니까? 생성 된 값이 이번 달의 첫 번째 값인 경우 카운터를 1로 재설정해야합니다.
이 질문에 대답하는 한 가지 방법은 매월 한 행씩있는 도우미 테이블을 갖는 것입니다. 한 열 - 날짜, 두 번째 열 - 시퀀스의 마지막 번호. 그런 헬퍼 테이블이 생기면 스토어드 프로 시저가 다음을 확인합니다 : 현재 달은 무엇입니까? 이번 달에 마지막으로 생성 된 숫자는 무엇입니까? 헬퍼 테이블에 그러한 번호가 있으면 헬퍼 테이블에서 해당 번호를 증가시키고이를 사용하여 키를 작성하십시오. 헬퍼 테이블에 이러한 번호가 없으면 1을 삽입하고 키를 작성하는 데 사용합니다.
마지막으로이 합성 값을 테이블의 기본 키로 사용하지 않는 것이 좋습니다. 사용자 요구 사항에서 "이처럼 테이블의 기본 키를 만듭니다"라는 것은 거의 없습니다. 회계사가 보고서 및 사용자 인터페이스에서 거래 옆에있는 문자와 숫자의 마술 세트를 볼 수있는 한 내부적으로 처리하는 방법은 귀하에게 달려 있습니다. 회계사는 "기본 키"가 무엇인지 알지 못합니다. 그리고 도시, 주유소 등의 몇 가지 테이블을 함께 사용하여 정규화 된 데이터베이스에서 필요한 정보를 얻는 방법을 알고 있습니다.
아, 그런데 조만간 매월 9999 건 이상의 거래가있을 것입니다.
잘 각 주유소에는 고유 한 순서가 있습니다. 그렇습니다. 기본 키가 아닐 수도 있지만 영수증의 ID로 고유해야하며, 거래 번호가 9999 이상일 수는 있지만 맞습니다. 쉽게 고정. 내가 원하는 건 다음 달에 다시 설정하는 방법입니다. 나는 달을 검사하고 자동으로 그것을 다시 놓기 위하여 상점 절차를 창조하는 것을 시도 할 것이다. 덕분에 나에게 좀 더 명확한 아이디어를 주었다. – xhulio
@xhulio 각 주유소에 고유 한 순서가있는 경우 도우미 테이블에는 GasStationID 열이 하나씩 있으며 각 주유소마다 매월 한 행씩 표시됩니다. –
@ xhulio 매월 카운터를 재설정해야하는 이유는 아직도 이해할 수 없습니다. 그 주유소의 전체 수명 동안 각 주유소에 대해 하나의 시퀀스를 갖는 것이 무엇이 문제입니까? –
모든 것을 하나의 열에 저장 하시겠습니까?
CREATE TABLE receipts (
CityCode VARCHAR2(2),
GasStationId NUMERIC,
AutoKey NUMERIC,
MonthCode VARCHAR2(2),
PRIMARY KEY (CityCode, GasStationId, AutoKey, MonthCode)
);
사용중인 DBMS : 그건
어느 다음과 같이 할 수 ... 네 기둥 위에 합성 키처럼 나에게 소리?당신이에서 실행되는 배치 작업을 할 수 MySQL이 있다면 실행 먼저 달 (MySQL은, MSSQL, PostgreSQL을, ...?) :
ALTER TABLE tablename AUTO_INCREMENT = 1
을하지만 그 논리는 응용 프로그램 계층에있을 것입니다 DB- 레이어 대신 ...
그런 경우이 키를 생성하고 저장하는 데 사용자 정의 함수를 사용하는 것이 가장 좋습니다. 마찬가지로 :
Create Function MyKeyGenerator(
@city varchar(250) = '',
@gas_station_id varchar(250) = '')
AS
/*Do stuff here
*/
내 생각 엔, 당신은 그 달의 마지막 자동 생성 수를 유지 다른 작은 테이블이 필요할 수 있습니다 당신은 한 달 동안 생성하는 첫 번째 레코드를 업데이트해야 할 수도 있습니다. 다음 레코드의 경우 해당 달에서 가져와 1 씩 증가시킵니다. 정수를 리턴 코드로 반환하는 저장 프로 시저를 사용할 수 있습니다 (자동 번호 부분에만 해당). 그런 다음 함수에서 나머지 작업을 수행 할 수 있습니다. 이개월이 같은 첫 글자를 가질 수 있기 때문에
, BTW 당신은 달의 첫 글자를 사용하여 다음 사항을주의하는 함정이있다 할 수 있습니다. 그 달의 2 자리 숫자 나 달 이름의 처음 세 글자를 사용해보십시오.
정확하게 인공 지능 번호를 주장 정체성 유형이 될 수 없습니다 준비 당신이 경우, 당신이 아닌 정체성 일반 정수이고, 다른 테이블을 한 다음 SQL Server 에이전트 작업이 저장된 전화 실행할 수 있습니다 증가하는 사업을 할 절차.
그보다 더 나쁩니다. 내가 그룹 단위의 시퀀스를 가질 필요가있는 곳을 생각할 수있는 유일한 시간은 대개 당신이 어떤 격차도 가질 수 없다는 것을 의미합니다 (운동 - 논리적으로, 왜?). 즉, 롤백시에도 프로 시저가 복원되어야하고 행이 커밋 될 때까지 차단되어야합니다. 예, 이것을 저장하는 테이블이 필요합니다. 그리고 꽤 많이 ... –
저는 이런 키가 회계사처럼 최종 사용자에게 사용자 친화적 인 것으로 생각합니다. 누가 키를보고 어떤 달 등인지 알 수 있습니다. 그리고 보통, 회계사들은 열쇠에 대해 신성 모독입니다, 그들은 단지 그것을 원합니다. –
어, 회계사는 어쨌든 _day_ 발생한 정보와 대부분의 다른 데이터를 알아야 할 것입니다. 영수증 테이블에서 그런 종류의 정보가 유지되지 않으면 다른 많은 문제가 발생할 것입니다. 영수증에있는 이런 종류의 ID는 원래 회사 회계사가 아니며 고객 대면 조회 등을 위해 수동 입력을 돕는 것입니다. –
- 1. MySQL에서 테이블의 자동 증분 열을 재설정하는 방법
- 2. mysql에서 자동 증가 값을 재설정하는 방법은 무엇입니까?
- 3. COM 스마트 포인터 새 인스턴스로 재설정하는 방법?
- 4. 어떻게 Ireset 자동 증분 mysql에서 필드 값을
- 5. AUTO 증분 ID 번호를 만드는 방법
- 6. ViewController의 증분 업데이트를 만드는 방법
- 7. 텍스트 상자의 값을 재설정하는 방법
- 8. 각 페이지보기에서 값을 재설정하는 방법
- 9. greenDao 자동 증분 ID를받습니다
- 10. 상대 자동 증분 ID
- 11. 자동 증가가없는 모든 기본 키를 찾는 방법
- 12. iOS : 자동 증분 NSString
- 13. SQL 용 스마트 자동 완성을 만드는 가장 좋은 방법
- 14. Confluence- 자동 증분 컬럼을 테이블에 추가하는 방법
- 15. 자동 증분없이 기본 키를 만드는 방법은 무엇입니까?
- 16. 콜백에 증분 값을 전달하는 방법
- 17. IndexedDB : 자동 증분 키를 0 (또는 1)으로 다시 채우거나 다시 설정하는 방법
- 18. 스마트 테이블 레이아웃을 만드는 방법
- 19. 자동 증분 기본 키를 사용하여 삽입하십시오 (존재하지 않는 경우). mvc3
- 20. batch for 루프를 사용하여 자동 증분 파일을 만드는 방법은 무엇입니까?
- 21. 카스 산드라 데이터베이스의 자동 증분 ID
- 22. MYSQL 자동 증분 필드로 분류
- 23. 양식 자동 증분
- 24. 자동 증분 ID JSON
- 25. 자동 증분 직원 ID
- 26. 자동 증분 번호
- 27. 자동 증분 ID의 필요성
- 28. 기본 키 자동 증분
- 29. 자동 증분 C#
- 30. 자동 증분 행 번호
해당 번호를 저장하지 마십시오. 선택한 쿼리에서 작성하십시오. –
회계 목적으로 저장해야합니다. – xhulio
이러한 키에 대한 추론을 알고 싶습니다. 이런 식으로 사용한 적이 한번도 없었습니다. 그런 접근법이 어떤 경우 유용한지를 아는 것은 흥미 롭습니다. –