저는 현재 하루 중 로컬 데이터베이스에서 실행해야하는 경우가 있으며 밤에 중앙 서버에 복제되는 시스템에서 작업하고 있습니다. 이 은을 모두 로컬 사이트가 주기적으로 접촉하지 않기 때문에 하나의 중앙 데이터베이스에서 모두 실행할 수 없습니다. 중앙 서버의 데이터는 이며 본사에서만을보고하기 때문에 역순으로 사이트로 다시 복제 할 필요가 없습니다.이 시나리오의 GUID/UUID? 아니면 복합 열쇠? 또는 기타
각 "사이트"에는 텍스트 기반 고유 키 (사람이 생성)가 지정됩니다. 그러나 데이터베이스 디자인에서 모든 테이블을 사이트 키를 참조하는 생각은 매력적이지 않습니다. 여기
는가 (고객의 대부분 잘 작동하는) 원격 복제에 대한 걱정없이 스키마 매우 삭감 버전의 예 : -가(I 만의 역사 테이블을 보여 드리겠습니다 이 지역 테이블은) 짧은 것을 유지 : 나는 중앙 서버에서 데이터베이스와 데이터베이스를 "병합"하기 위해 올 때까지, 괜찮
[Site]
SiteKey [PK] (Gauranteed 100% unique across all sites text based key)
[User]
SiteKey [FK -> Site]
UserID [PK]
[Area]
SiteKey [FK -> Site]
AreaID [PK]
Description
UpdatedDtm
UpdatedUserID [FK -> User]
[AreaHistory]
Site [FK -> Site]
AreaID [FK -> Area]
Description
UpdatedDtm
UpdatedUserID [FK -> User]
AuditedDtm
[Location]
AreaID [FK -> Area]
LocationID [PK]
Description
UpdatedDtm
UpdatedUserID [FK -> User]
[Sensor]
LocationID [PK/FK -> Location]
SensorNo [PK]
UpdatedDtm
UpdatedUserID [FK -> User]
[Reading]
LocationID [PK/FK -> Sensor]
SensorNo [PK/FK -> Sensor]
ReadingDtm [PK]
. 다른 사이트에서 생성 된 ID와 데이터를 혼합하기 때문에 분명히 위치 테이블에서 충돌을 일으킬 것입니다.
나는이 문제를 생각 첫 번째 방법은이 작업을 수행하는 것이 었습니다 :
GS 짧은) :
[Location]
SiteKey [FK -> Location, FK -> User] ** ADDED THIS
AreaID [FK -> Area]
LocationID [PK]
Description
UpdatedDtm
UpdatedUserID [FK -> User]
[Sensor]
SiteKey [FK -> Location, FK -> User] ** ADDED THIS
LocationID [PK/FK -> Location]
SensorNo [PK]
UpdatedDtm
UpdatedUserID [FK -> User]
[Reading]
SiteKey [FK -> Sensor] ** ADDED THIS
LocationID [PK/FK -> Sensor]
SensorNo [PK/FK -> Sensor]
ReadingDtm [PK]
기본적으로 모든 테이블이 사이트에 고유 한 각 행을 만드는 SiteKey을 가져옵니다.
대안이 (어떤 장소에서 사용 UUID를)입니다 : -
[User]
SiteKey [FK -> Site]
UserUUID [PK]
[Area]
SiteKey [FK -> Site]
AreaUUID [PK]
Description
UpdatedDtm
UpdatedUserUUID [FK -> User]
[AreaHistory]
Site [FK -> Site]
AreaUUID [FK -> Area]
Description
UpdatedDtm
UpdatedUserUUID [FK -> User]
AuditedDtm
[Location]
AreaUUID [FK -> Area]
LocationUUID [PK]
Description
UpdatedDtm
UpdatedUserUUID [FK -> User]
[Sensor]
LocationUUID [PK/FK -> Location]
SensorNo [PK]
UpdatedDtm
UpdatedUserUUID [FK -> User]
[Reading]
LocationUUID [PK/FK -> Sensor]
SensorNo [PK/FK -> Sensor]
ReadingDtm [PK]
이 아래로 절단 기억하지만, 문제를 보여줍니다.
내가 찾을 수있는 다른 대안이 있습니까? ID 재 매핑에 대해 생각했지만 새로운 악몽을 선사하는 것 같았습니다.
이 시나리오의 성가신 부분은이 시나리오를 사용하는 경우가 매우 적고 나머지는 많은 사이트에 서비스를 제공하는 하나의 데이터베이스에 만족한다는 것입니다. 그러나이 시나리오를 원한 클라이언트는 가장 큰 것입니다 .-)
나는 UUID를 사용할 수 있다고 생각했는데, 예외가 발생하면 모든 곳에서 예외를 만들 수 있다는 생각이 들었습니다. 그들을 사용하려고합니다.
차이가있을 경우 PostgreSQL을 사용하고 있습니다.
PS, this 토론이이 경우에 관련 될 수 있습니다. 나는 좋은 gauranteed 고유 한 SiteKey가 있다고 생각하는 또 다른 방법이 있는지 궁금해합니다.
제공 한 링크를 읽은 후 추가 할 항목이 없습니다. 개인적으로 UUID 옵션을 선택했습니다. 공간과 속도는 앞으로 몇 년 안에 만 증가 할 것이며, 그것은 문제가되어서는 안됩니다. 정비는 앞으로 몇 년 안에 증가 할 것이고 그것은 커다란 문제가 될 것입니다. –
사실 그 링크에는 많은 정보가 있지만, 모든 테이블의 복합 키의 일부로 사용하는 경우 고유 한 SiteKey가있는 경우에는 "나쁘지 않습니다"라는 질문에 궁금해졌습니다. – Mark