고급 PHP 응용 프로그램을 만들 때 MySQL 데이터베이스를 설계하는 방법을 어떻게 알 수 있습니까?

StackOverflow https://stackoverflow.com/questions/200257

  •  03-07-2019
  •  | 
  •  

문제

PHP에서 쇼핑 카트 나 포럼을 만든 적이 없습니다. 다른 사람 프로젝트를보고 분석하거나 그러한 프로젝트를 만드는 방법이나 그러한 프로젝트가되는 방법을 보여주는 자습서를 보는 것 외에도. 사람이 그러한 일을 만들기 위해 데이터베이스 구조를 설계하는 방법을 어떻게 알 수 있습니까? 나는 시행 착오를 통해 그 문제를 추측하고있다 ...

도움이 되었습니까?

해결책

데이터베이스 디자인에 대해 배울 수있는 주요 기술은 데이터베이스 정규화.

데이터베이스 정규화에는 특히 많은 트랜잭션이있는 경우 한계가 있습니다. 어느 시점에서 당신은 강요 될 수 있습니다 거절.

그러나 IMHO는 항상 정규화 된 데이터베이스 디자인으로 시작하는 것이 좋습니다.

다른 팁

당신은 기본 사항을 읽고 이해해야합니다 표준화. 대부분의 프로젝트의 경우 3 번째 정상 형태로 정규화하는 것이 좋습니다. 다소 정규화를 원할 때 항상 특정 시나리오가 있지만, 그 개념을 이해하면 데이터베이스가 정규화 된 형식으로 어떻게 구성되는지 생각할 수 있습니다.

다음은 테이블을 정규화하는 매우 기본적인 예입니다.

students
  student_id
  student_name
  student_class
  student_grade

다양한 데이터가 포함 된 꽤 표준 테이블이지만 몇 가지 문제를 즉시 볼 수 있습니다. 우리는 학생의 이름이 그의 신분증에 의존한다는 것을 알 수 있지만, 학생은 둘 이상의 수업에 참여할 수 있으며 각 수업은 아마도 다른 등급을 가질 것입니다. 그런 다음 테이블에 대해 다음과 같이 생각할 수 있습니다.

students
  student_id
  student_name

class
  class_id
  class_name

이것은 나쁘지 않습니다. 이제 우리는 다양한 학생들과 다양한 수업을 볼 수 있지만 학생의 성적을 캡처하지는 않았습니다.

grades
  student_id
  class_id
  grade

이제 우리는 세 번째 테이블을 가지고있어 특정 학생, 특정 수업 및 해당 수업과 관련된 등급 간의 관계를 이해할 수 있습니다. 첫 번째 초기 테이블에서 이제 정규화 된 데이터베이스에 3 개의 테이블이 있습니다 (예를 위해 더 이상 등급을 정상화 할 필요가 없다고 가정 해 봅시다 :)).

이 기본적인 예에서 우리가 수집 할 수있는 몇 가지 사항 :

  • 우리의 데이터는 모두 일종의 키와 관련이 있습니다 (Student_id, class_id 및 Student_id + class_id). 이들은 각 테이블의 고유 식별자입니다.
  • 우리의 주요 관계를 통해 우리는 정보를 서로 관련시킬 수 있습니다 (학생 #4096이 등록 된 수업은 몇 개입니까?)
  • 우리는 우리의 테이블이 지금 복제 된 데이터를 포함하지 않는 것을 볼 수 있습니다 (학생 _class가 많은 학생들에게 동일한 값이 될 수있는 첫 번째 테이블에 대해 생각해보십시오. 클래스 이름을 변경해야한다면 모든 레코드를 업데이트해야합니다. 정규화 된 형식, class_id의 class_name을 업데이트 할 수 있습니다)

또한 데이터베이스 스키마를 만드는 데 시각적 편집기를 사용하는 것이 좋습니다. 최근에 사용하고 있습니다. http://dev.mysql.com/workbench/

데이터베이스 디자인을 만들면 더 많은 경험을 가진 사람이이를보고 피드백을 제공하도록하십시오. 그러나 디자인을 소비 할 수있는 시간이 많이 걸리면 결국 구현을해야하며 무언가를 놓치거나 다른 방법으로 더 나은 일을 할 수 있다는 것을 알게 될 것입니다.

따라서 디자인, 피드백을 받으십시오. 그러나 변화를 두려워하지 마십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top