2012-10-24 2 views
1

웹 사이트에 대한 사용자 기본 설정을 저장하는 가장 좋은 방법은 무엇일까? 기본적으로 기본 시간대, 기본 텍스트 크기 등과 같은 기본값이 있습니다. 각 설정에 대해 별도의 열을 만드는 것은 실용적이지 않습니다. 현재 생각할 수있는 유일한 방법은 기본 설정을 위해 users 테이블에 단일 열을 추가하고 거기에 모든 설정을 적용하는 것입니다.MySQL에서 사용자 환경 설정을 저장하는 가장 효율적인 방법은 무엇입니까?

예를 들어, 한 열만 다음과 같은 서식을 사용할 수 있습니다 : timezone:GMT;text_size:12;default_value1:something;default_value2:FALSE. 그런 다음 PHP에서 그것을 잡을 때, 나는 로그인 한 사용자에 대해이 열을 선택하고 $ _SESSION [ 'settings'] [ 'setting_key'] = "setting_value"로 설정하여 결과를 폭발시킵니다.

더 똑똑한 방법이 있습니까, 아니면 이미 올바른 방향으로 가고 있습니까? 이것에 유일한 단점은 모든 것이 함께 일괄 처리되기 때문에 각 특정 설정을 통해 검색 할 수 없다는 것입니다.

답변

4

IMHO이게 바로 serialize입니다.

검색 가능한 경우 끝내기를 원할 수 있습니다. 한편 , 당신은 완전히 다른 접근을 할 수 있습니다 대신 열마다 설정으로 큰 테이블에 저장하는, 당신은 종류의 테이블을 만들 수 있습니다 그런

CREATE TABLE settings (user_id INT, setting VARCHAR, value VARCHAR) 

및 저장 설정을. 그런 다음 열 추가/제거로 제한되지 않습니다.

CREATE TABLE settings (id INT, setting VARCHAR) 
CREATE TABLE settings_values (user_id INT, setting_id INT, value VARCHAR) 

setting_idsettings.id에 외래 키는 것을 고려하고있다 일부 users 테이블이 있다고 가정 :

또 다른 방법은 테이블의 배수를 생성하는 것입니다 (더 가능한 설정 조회를 속도를) 사용자 ID는 user_id이 두 예제 모두의 외래 키입니다.

+2

다른 데이터 유형은 어떻게 처리됩니까? 예를 들어, boolean, int 또는 varchar 값을 가질 수 있습니다. 검색 할 수 없다고해서 문제가되지 않을까요? –

+1

또한 마지막 접근 방식으로 여러 테이블에서 설정 및 값을 갖는 방법을 빠르게 할 수 있습니까? 그것은 단지 사물을 복잡하게 만드는 것처럼 보일 것입니다. –

+0

그러면 문자열 대신 id로 설정을 조회 할 수 있습니다. select 절은 훨씬 빠릅니다. 타입에 관해서는, 당신은 소프트웨어에서 타입 변환을해야 할 것입니다.별로 최적은 아니지만, 설정 당 열이 없어지는 방법입니다. – favoretti

2

'선호도 당 열'옵션을 사용할 것입니다. 결국 프로그램은 환경 설정을 저장 한 다음 검색해야하므로 프로그램이 처리 방법을 모르는 환경 설정이있는 것처럼 느껴지지 않습니다.

필자가 작성하고 유지 관리하는 데이터베이스 프로그램에 유사한 시스템이 있습니다.이 시스템에서 사용자 당 10 개의 기본 설정이 저장됩니다. 이 기초에 저장하면 복잡성이 줄어 듭니다.

몇 개의 환경 설정을 저장 하시겠습니까? 나는 이것이 열 개 이상 될 것을 의심한다. 당신은 한 가지의 환경 설정이 한 번 그들에게 모든를 저장 모든를 검색하려는 경우

는, 다음은 concatened 문자열 방법을 사용하는 것이 가능하지만 그것을 만들면서 일반적으로 나는 이것을 권하고 싶지 않다 개별적으로 환경 설정에 액세스하는 것이 더 어렵습니다.

+1

별도의 설정 열에 저장하거나 사용자 테이블에 저장 하시겠습니까? 감사. –

+0

다릅니다 : 화면 당 기준으로 데이터를 저장하므로 기본 설정은 필드가있는 별도의 테이블에 저장됩니다. 사용자 ID | 화면 ID | 기본 설정 1 | 기본 설정 2 | 사용자 당 원자 데이터를 사용자 테이블에 직접 저장할 수 있습니다. –

+0

몇 개의 열이 너무 많습니까? 나는 약 25 살 정도에요. 나는 50 점을 얻는 것을 볼 수 있었다.이 시점에서 최선의 선택이 아닌가? – user3308043

관련 문제