2011-08-11 2 views
12

사용자 계정 정보를 저장하는 SQLite 데이터베이스가있는 앱이 있습니다. 나는 응용 프로그램이 오직 한 명의 사용자 만 가질 것이라는 가정하에 데이터베이스를 설계했습니다. 따라서 사용자 ID는 데이터베이스에 저장되지 않지만 서버의 중앙 데이터베이스에 저장됩니다. 그러나 앱을 로그 아웃하고 다른 사용자가 로그인 할 수는 있지만 현재이 문제는 데이터가 다운로드 된 후 다른 사용자의 데이터에 추가됩니다. 이것은 내가 원하는 일이 아니지만 이것을 해결하기 위해 데이터베이스 디자인을 어떻게 바꾸는 것이 최선인지 모르겠습니다. 나는 대략 생각했다 :여러 사용자가있을 가능성이있는 Android 앱용 SQLite 데이터베이스

  1. 사용자 당 하나의 데이터베이스. 사용자가 친구의 휴대 전화에 한 번만 로그인하고 다시는 로그인하지 않으면 불필요한 데이터 저장이 발생할 수 있습니다. 또한 나는 이것이 관리하기 어려울 것이라고 짐작한다.
  2. 모든 테이블에 사용자 ID 열을 추가하므로 추가로 문제가 발생하지 않습니다. 여전히 (1)이 가지고 있고 1의 모듈성을 잃어 버리는 불필요한 데이터 문제가 있습니다.
  3. 사용자가 로그 아웃 할 때 데이터베이스를 지 웁니다. 사용자가 서버에 많은 양의 데이터를 가지고있는 경우 응용 프로그램이 시작될 때 데이터를 동기화하는 데 시간이 오래 걸립니다 (다른 스레드에서 수행되지만 여전히 고통 스럽습니다).

이러한 접근 방법 중 하나가 좋습니까? 아니면 이것을 할 수있는 더 좋은 방법이 있습니까?

답변

3

필자는 옵션 1로 갈 것입니다. 별도의 파일로 유지하면 여러 데이터베이스를 가지고 있어도 성능에 아무런 영향을 미치지 않을 것입니다.

데이터베이스 파일 이름에 사용자 ID를 추가 할 수 있습니다. 4 개 이상 (또는 특정 양의 데이터를 초과하는 경우) 가장 오래된 데이터베이스를 자동으로 삭제하는 일종의 LRU 시스템을 사용할 수 있습니다.

사용하려는 데이터 저장 용량의 양과 동일한 기기에서 앱을 사용할 가능성이있는 사용자의 수를 알고 있기 때문에이 선택 항목의 세부 사항은 귀하에게 달려 있습니다.

+0

저는 LRU 접근법을 좋아합니다. 언제 수정되었는지 추적 할 생각 이었지만 두 가지 제안은 모두 구현하기가 더 쉬울 것입니다. 그리고 나는 1 명 이상의 사용자가 동일한 장치에서이 앱을 사용할 것이란 것을 정말로 의심하지만 결코 알지 못합니다! 감사합니다 :) – Pikaling

+0

제안 2보다 실제로 제안 1의 장점은 무엇입니까? 어떤 "모듈화"가 손실됩니까? "성능에 미치는 영향"은 무엇입니까? 정규화와 관계 데이터베이스 원칙에 대해 듣는 사람이 있습니까? 장치에 저장된 둘 이상의 데이터베이스에 대해 데이터베이스 구조를 업그레이드/변경하는 방법은 무엇입니까? – Ewoks

1

이것은 실제로 사용자의 요구 사항에 따라 다르지만, 세 번째 옵션은 실용적이지 않습니다. 앱을 제거하고 다시 설치하는 것과 동일합니다.

아마도 옵션 2를 사용하는 경향이 있지만 데이터베이스 내에서 수행하려는 작업에 따라 다릅니다. 예 : 개인이 아닌 모든 사용자에 대한 통계 또는 쿼리를 원하고 사용자간에 공유되는 공통 데이터가있는 경우

저장소 크기가 걱정되면 특정 시간 프레임으로 로그인하지 않은 모든 사용자의 데이터를 제거하는 서비스를 작성하십시오.

+0

감사합니다 - 거기에 대한 좋은 제안 – Pikaling