나는 사용자 정보를 수집하고 처리하는 앱을 가지고있다. 많은 계층 구조를 되 돌린다
CREATE TABLE registrations(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50),
email VARCHAR(50),
email_id INT
);
CREATE TABLE email(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(50),
person_id INT
);
CREATE TABLE person(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
);
ALTER TABLE registrations
ADD FOREIGN KEY (email_id) REFERENCES email (id);
ALTER TABLE email
ADD FOREIGN KEY (person_id) REFERENCES person (id);
워크 플로는
:등록 정보 - 프로세스,
이메일 -if는 할당 다른, 추가의 새로운 기능입니다.
- 사람이 새로 추가 된 경우 추가하거나 추가하십시오.
예 코드 :
function newRegistration($input){
$registraton = new Registration();
$registraton->setUsername($input['username']);
$registraton->save();
$email = null;
if(Email::exists($input['email'])){
$email = Email::find($input['email']);
}else{
$email = Email::create($input['email']);
}
$registraton->setEmailId($email->getId());
$registraton->save();//!!
$person = null
if(Person::exists($input['name'])){
$person = Person::find($input['name']);
}else{
$person = Person::create($input['name']);
}
if(!$email->getPersonId()){
$email->setPersonId($person->getId());
$email->save();//!!
}
}
, 실제 구현에 더 트리거와 의존성 그냥 예가되는 코드 및 처리 사건의 순서 :
등록 -> 이메일 -> 사람
이것은 분명히 그냥 crea를 업데이 트하는 편리한 방법이 아닙니다 테드 요소 ... 나는이 시나리오를 최적화하는 방법을 disign-patern 또는 DB 아키텍처를 찾고 있습니다.
편집 :
한 이메일과 곱셈 등록이있을 수는 한 사람에 여러 개의 이메일이있을 수 있습니다.
'sidenote :''parson_id'라는 라벨이 붙은'person_id'가 누락되었습니다 – DevZer0
그 테이블들 간의 관계를 제공 할 수 있습니까? 나에게 하나의 테이블에서 모든 것을 병합하는 것이 좋을 것 같다. 단, 일대 다 관계가 없다면 말이다. PHP를 사용하고 있기 때문에 "방금 작성한 요소를 업데이트"할 필요가 없습니다. 모든 필수 정보를 데이터베이스에 채울 때 한 번 작성하십시오. – Eggplant
나는 레코드가 존재하는지 검사하는 것이 아니라 ON DUPLICATE KEY UPDATE 구문을 사용하여 새로운 레코드를 삽입하는 것이 좋습니다. 이것을 사용하여 새 레코드의 id 나 기존 레코드의 id를 반환 할 수 있습니다. – Kickstart