2010-12-14 3 views
2

최종 사용자가 사용자 지정할 수있는 생활용 데이터베이스 응용 프로그램을 작성합니다.사용자 정의 테이블의 잘 알려진 행에 대한 최선의 접근법은 무엇입니까?

종종 이것은 데이터베이스를 잠시 제쳐두고 떠날 것을 의미합니다. 내 생각 엔티티 유형 중 일부는 무한한 우주 또는 도메인을 가지고 있습니다.

이름 유형을 지정하십시오. 이름, 성, 결혼 이름, 법적 이름, 인사말 이름 등을 가질 수 있습니다. 나는이 우주에 상한을 두지 않을 것이다.

그러나 잘 알려진 특정 이름 유형을 찾아 사용해야합니다. 표시 이름과 정렬 이름을 간단하게 유지한다고 가정 해 보겠습니다.

모든 이름 유형 (즉, 전체 유니버스)을 쿼리하고 잘 알려진 이름 유형도 반환 할 수 있기를 바랍니다.

  1. 는 id 컬럼 및 코드 열이 하나 개 name_type 테이블 유무 :

    은 데이터베이스 내에서이 작업을 수행하기위한 몇 가지 전략이있다. 특정 금액보다 작은 ID 값은 시스템에서 사용하기 위해 "예약 됨"입니다. 이보다 높은 ID 값은 사용자 유형으로 간주됩니다.

  2. ID/코드 쌍에 어떤 유형의 행 (예 : 사용자 정의 또는 시스템)을 나타내는 부울 또는 int 유형의 표현 인 열을 추가하십시오. 똑같은, 정말로; 단지 다른 열을 사용하여 정보를 ID에서 오버로드하는 대신 명시 적으로 분리합니다.
  3. 이름 지정 규칙이 아마도 name_type 및 name_type_system 인 두 개의 테이블이 있어야합니다. name_type_system은 사용자에게 제한이 없다는 것이 이해되거나 시행됩니다. name_type은 도메인입니다. 쿼리는 이러한 테이블에서 UNION을 수행하고 응용 프로그램은 시스템 테이블을 절대 업데이트하지 못하도록합니다.

사람들은 어떤 전략을 사용합니까? 어떤 전쟁 이야기? 다른 하나를 선택하는 특별한 이유가 있습니까? 내가 못 보는 거대한 함정들? 첫 번째는 종종 나쁜 일) 매직 번호, http://en.wikipedia.org/wiki/Magic_number_(programming라고하고 있습니다 귀하의 세 가지 아이디어의

답변

1

최저

,
레어드 때문에 실수를 할 수 있습니다에 대해 "알고"하지 않는 코드입니다. 또한 시간이 지남에 따라 "결국, 최소값을 높게 설정하고 10,000 개의 기존 행을 다시 정렬해야합니다." 두통, 두통.

그 후, 다른 두 작품 중 하나. 그러나 세 번째 버전에서는 DB 서버를 사용하여 최종 사용자가 사용하는 계정에 대한 삽입/업데이트/삭제 액세스를 거부 할 수 있으므로 코드가 간단 해집니다.

옵션 2와 3을 결정하는 방법은 실제로 두 개의 개별 항목입니까? 그럴 경우 서로 다른 보안을 유지하는 경향이 있으며 서로 다른 작업이 수행됩니다. 하나는 업그레이드로 수정되고, 다른 하나는 수정되지 않습니다. 실제로 두 가지 다른 경우 두 테이블로 이동합니다. 그들이 거의 항상 같은 것으로 취급되는 두 가지 맛이라면, "type"플래그, 옵션 2를 사용하여 하나의 테이블에 들어갑니다.

+0

감사합니다; 훌륭한 대답. 제 경우에는 옵션 2가이 논리를 따라 가야합니다. –

관련 문제