내가

2012-03-24 4 views
0

내가 스키마 내 ER 다이어그램을 번역 내 스키마에이 제약 조건을 추가 할, 그러나 나는 그것이내가

CREATE TABLE Managers 
(
SIN int NOT NULL, 
LastName varchar(255) NOT NULL, 
FirstName varchar(255), 
Address varchar(255), 
City varchar(255), 
CHECK ????? 
) 

때문에, 누구를 수행에 난 단지 1 머리 관리자 또는 한 기록이이 테이블에 와서 스키마에서이 제약 조건을 푸시하는 방법을 알고 있습니까?

+1

CHECK 제약 조건이 아니라고 생각합니다. [매뉴얼] (http://dev.mysql.com/doc/refman/5.6/en/create-table.html "CREATE TABLE (MySQL)") : * CHECK 절은 모든 스토리지 엔진에서 구문 분석되지만 무시됩니다. . * –

답변

1

해당 제약 조건을 확인하려면 트리거를 추가해야합니다.

트리거를 프로그래밍하기 전에 데이터 모델을 더욱 최적화 할 수 있다고 생각합니다. 관리자는 EMPLOYEES 테이블에 FK가 있어야합니다. EMPLOYEES (및 CUSTOMERS) 테이블에는 PEOPLE 테이블에 대한 FK가 있어야합니다.

단 하나의 인스턴스 (하나의 레코드) 만 저장하는 테이블을 만드는 것은 드문 일입니다. 조직에는 Manager가 하나만있을 수 있다는 것을 나타내는 ORGANIZATIONS 및 MANAGERS 테이블 사이에 제약 조건이있을 수 있습니다. 조직에서 관리자로 FK를 정의하여이를 수행하십시오. 조직에 항상 Manager가 있어야한다는 제한 조건을 적용하려면 FK to MANAGERS의 정의에 NOT NULL을 추가하십시오.

CREATE TABLE ORGANISATIONS (
    Id   INTEGER  NOT NULL, 
    ... 
    ManagerId INTEGER  NOT NULL, 
    ... 
) 

이렇게하면 트리거가 필요 없습니다. 방아쇠는 까다로울 수 있습니다. 사용을 피할 수 있으면 사용하지 마십시오. 그것들은 데이터베이스의 '암흑 물질'입니다. 아무도 입력하지 않은 자료를 데이터베이스에서 찾을 수 있습니다. 기회가 많아서 모호한 방아쇠가 생길 수 있습니다. 때로는 테이블을 변경할 때 테이블에 정의 된 트리거가 비활성화 될 수 있습니다. 갑자기 데이터베이스가 정상적으로 작동하지 않습니다. 암흑 물질.