2011-09-06 9 views
0

표준 자동 정수 증가 값을 사용하는 앱이 있습니다. 또한 현재 정수로 설정된 global_id를 관리하는 테이블이 있습니다. 이 글로벌 값에 대해 비 정수를 사용하는 것이 바람직 할 수 있으므로 비 정수의 존재 여부에 따라 항목 ID 또는 전역 ID가 사용되는지 분명히 알 수 있습니다.indvidual id 및 글로벌 id 처리

예를 들면 다음과 같습니다.
site.com/item/id/123 - item id 
site.com/item/id/12j45 - global id 

내부적으로 전역 ID 테이블은 여전히 ​​ID 값을 유지합니다 (이 사실에 대해서는 확실하지 않습니다). 하지만 non-integer global_identifier_id를 갖고 싶습니다. 이 문제를 처리 할 수있는 MySQL 데이터 유형이 있습니까? id 값을 얻고 단일 (잠재적으로) 무작위 문자 (1에서 1b, 2에서 2d)를 덧붙입니다.

더 좋은 방법이 있습니까? 예를 들어, 문구에 등록 된 객체로 문제의 객체의 ID를 생각하고있었습니다. 따라서 위치는 ID 123이지만 전역 값으로 123loc이됩니다. 아마도, 이미 이것을 수행하는 레일 구성 요소가 있을까요?

들으

@Doug 테이블에서 고유성에 대한
예; 기본적으로 객체 관계형 불일치 문제 (객체 목록)의 버전입니다. 현재 두 개의 ID 집합이 있으며 두 개의 네임 스페이스로 제안한 것과 수동으로 유사하게 관리합니다.

네임 스페이스는 필요하지 않습니다. 하나는 int로 설정되고 다른 하나는 다른 것으로 설정 되었기 때문에 네임 스페이스는 global_id를보고 있기 때문에 네임 스페이스가 필요하지 않습니다.

답변

0

이 같은 두 개의 네임 스페이스,이 것이 바람직 할 것입니다 : 당신은 방법을 결정하기 위해 불필요한주기를 정수 필드와 구분하고 만들 수있는 캐릭터를 위해 global_id을 필요로 할 것이다, 그렇지 않으면

site.com/item/id/123 
site.com/item/gid/12j45 

을 데이터의 내용을 기반으로 데이터를 쿼리합니다.

global_id를 사용하여 수행하려는 작업은 무엇입니까? 여러 테이블에서 독창적 인 수준입니까? 그렇다면 단순히 id 필드에 편지를 추가하는 것만으로는 충분하지 않습니다. 아마도 약간의 트리거를 설정하면 트릭을 할 수 있지만, 프로세스를 조금 더 먼저 생각할 것입니다.

UPDATE : 여러 테이블에 걸쳐 고유성를 들어, 답변의 무리가 있지만, 하나의 간단한 일이 : 당신이 새 레코드를 추가 할 때

CREATE TABLE global_references (
    id int NOT NULL auto_increment PRIMARY KEY, 
    reference_type varchar(50) NOT NULL, 
    reference_id int NOT NULL, 
    UNIQUE KEY akGlobalReferences (reference_type, reference_id); 

에서, TABLENAME과이 테이블에 대응하는 행을 삽입하고 새 ID를 생성하고 결과 ID를 전체적으로 고유 한 ID로 사용하십시오.

이미 설치되어 있고 문자를 추가 할 수있는 대체 저장 방법을 찾고 있습니다. 두 유형의 ID에 모두 동일한 URL을 사용하려면 ID 필드에 '유추 된'접두사 만 있으면됩니다. 예를 들어 두 URL 인 경우 :

sites.com/item/id/123 
sites.com/item/id/g123 

첫 번째 문자를 확인합니다. g 인 경우이를 제거하고 전역 표를 확인하십시오. 그렇지 않으면 해당 테이블을 확인하십시오. 그러나이 작업을 위해 별도의 URL을 권장합니다.

+0

여러 테이블에서의 고유성 - 예 – timpone

+0

업데이트가 현재 가지고있는 것입니다 - UI 측면에서 object_id 또는 전역 참조를 처리하는지 여부를 알 필요가 없도록 리팩토링하는 방법을 생각합니다. 신분증. thx – timpone

0

이 필드에는 varchar를 사용합니다. 이렇게하면 원래 항목 ID에 원하는 것을 추가 할 수 있습니다.어쩌면 _a27d와 같은 것을 원본 ID (밑줄 + 4 개의 임의 문자)에 추가 할 수 있습니다. 그러면 항상 밑줄을 보면서 원래 ID를 되 찾을 수 있습니다.

+0

예 - 이런 식으로 - 어쩌면 d는 특정 개체를 참조하여 검색 단계가 필요조차하지 않습니다. – timpone

+0

또는 ID 앞에 "G"접두사를 붙이면 전역 ID임을 나타낼 수 있습니다 –

0

로컬 ID와 글로벌 ID를 모두 피할 수 있습니다.

각 테이블에는 global_ids 테이블에 대한 외래 키가있는 고유 한 ID가 있습니다.

CREATE TABLE t1 (
    id int NOT NULL auto_increment PRIMARY KEY, 
    FOREIGN KEY (id) REFERENCES global_ids(id)); 

CREATE TABLE t2 (
    id int NOT NULL auto_increment PRIMARY KEY, 
    FOREIGN KEY (id) REFERENCES global_ids(id)); 

당신은 여전히이 개 삽입합니다 (global_ids 하나, 실제 테이블에 대한 다음 일을)하고 결국,하지만 당신은 ID의 두 가지 유형의 문제를 처리 할 필요가 없습니다.