2013-08-10 3 views
2

저는 PHP 코드를 사용하는 웹 응용 프로그램을 만들고 MySQL은 저장소 엔진을 사용하고 있습니다. 내 데이터 모델을 작업 할 때 '기본'데이터를 처리 할 때 약간의 문제가 있음을 깨달았습니다.기본값은 어디에 두어야합니까?

기본값을 포함하도록 MySQL 스키마를 설계했는데, 대부분의 경우 손으로 데이터를 조작했기 때문에 당시에는 의미가있었습니다. 나중에 다른 사람이 변경할 수 있도록 제어판을 추가하는 데 1 년이 걸렸습니다. 자료.

문제는 일부 개체에 필요한 '기본'값을 처리하는 방법이됩니다. 기술적으로, 'null'을 남겨 두는 것도 기본값이지만, 지금까지는 특별히 걱정스럽지 않았습니다.

MySQL 기본값을 사용하는 경우 새 값을 삽입하면 즉시 돌아 서서 데이터베이스에서 '실제'데이터를 가져와야합니다. 반면 PHP에서 기본값을 설정하면 두 곳에서 기본값을 사용하여 DRY를 위반하기 시작합니다. 그리고 누군가가 '빠른'수정을 한 장소에서 변경하면 꽤 재미있는 버그로 디버깅 할 수 있습니다. 동시에, 데이터 스키마의 일부이기 때문에 MySQL에서 기본값을 제거 할 수 없기 때문에이 스키마에 남겨 둘 필요가 있습니다.

나는 뭔가를 내려다 보거나 잘못된 가정을 어딘가에 내기를 기꺼이 하겠지만, 나는 그것이 무엇인지 모릅니다. 누구든지 이것을 처리하는 방법에 대한 조언이 있습니까?

편집 : 명확성을 위해

, 내 PHP 코드의 라인을 따라 뭔가 수 있습니다 :

$foo = new foo(); 
//Add in instance-specific data 
$foo -> save; 

푸의 다음 쿼리 실행됩니다 방법을 저장합니다

INSERT INTO FOO (bar1, bar2) 
VALUES (:bar1, :bar2) 

그러나 해당를 Foo가 사용하는 (많은) 변수 중 2 개를 삽입합니다. 이 모든 것이 나를 '기본'상태로 설정합니다. 지금이 순간, 나는 다음 실행해야합니다 :

$foo= Foo::getFooWithId($foo->id); //I know I should use a DBA; this is legacy code 

그리고 $ foo는이 다음 데이터베이스에 설정되어있어 데이터로 채워집니다. E. G. bar3과 bar4는 처음에 객체를 만들 때 설정되지 않은 기본값을 가지고 있습니다. 사용자가 나중에 원할 경우 변경할 수 있지만 '기본'객체의 일부가 아닙니다.

기본값을 PHP로 옮겨야합니까? MySQL에 남겨두고 꺼내십시오. 두 곳에 다 넣어서 DRY를 위반합니까? 아니면 네 번째, 더 나은 옵션을 놓치고 있습니까?

+0

이 질문을 던지면 다음과 같은 질문을하게됩니다. 그러나 마스터 값 테이블을 사용하여 스키마의 필드 기본값을 설정하여 응용 프로그램에서 SELECT 및 INSERT/UPDATE 작업에 대해 항상 참조 할 수 있습니다. ? 나는 이것을 알고 싶어 할지도 모른다. 외래 키가 정말로 관계형 일 필요가 있다면 문제가됩니까? – cerd

+0

기본 생성자에서 개체를 채 웁니다. –

답변

1

예제 쿼리는 표시하지 않았지만 잘못 가정합니다.

PHP에서 삽입 쿼리를 작성하여 기본값이있는 요소를 생략하는 방식으로 작성하면 MySQL이 인계 쿼리를 인계 받아 추가합니다.

따라서 id, usercomment 열이있는 테이블이 있다고 가정 해보십시오. comment에 기본값이 있다고 가정 해 보겠습니다. 내가 말하는 것은 iduser (또는 id이 기본 자동 증가 인덱스 인 경우 user 일 수도 있음)을 지정하는 삽입 쿼리를 만들 수 있으며 comment은 자동으로 기본값을 수신합니다 테이블 정의에서 설정합니다.

정말 ... 그들이 가장 사용되는 위치를 확인하고 거기에 그들을 유지, 앱 디자인에 가장 적합한 무엇이든 편집

.

하지만 내가 따르는 단일 규칙은 다음과 같습니다. 두 개 이상의 장소에 기본값이 없습니다. 특히 중복되는 경우 (확장하는 것과 반대).

+1

나는 그것이 OP가 요구하고있는 것이라고 생각하지 않는다. 나는 그가 자신의 응용 프로그램의 목적을 위해 스키마에 넣고 싶지 않은 경우 col의 실제 기본값을 어디에서 찾을 지에 대한 모범 사례를 요구하고 있다고 생각합니다. – cerd

+0

@cerd 당신이 맞을 것입니다. OP가 도움이되지 않으면 삭제하겠습니다. – Shomz

+1

@RonLugge 만약 당신이 (짧게) 당신이 명확하게 편집하고 싶을지도 모르는 것에 대해 물어 본다면 첫 번째 코멘트를보십시오 - 나는 요지를 얻을 수 있었지만 q는 몇 번 읽어야합니다. – cerd

관련 문제