UNIQUE KEY
제약이 경우에 사용할 수 있습니다
는
CREATE TABLE users (id int not null, primary key (id));
INSERT INTO users VALUES (1), (2), (3);
CREATE TABLE orders (id int not null, primary key (id));
INSERT INTO orders VALUES (1), (2), (3);
CREATE TABLE users_orders (uid int NOT NULL, oid int DEFAULT NULL,
FOREIGN KEY (uid) REFERENCES users (id),
FOREIGN KEY (oid) REFERENCES orders (id),
UNIQUE KEY (uid, oid));
INSERT INTO users_orders (uid) VALUES (1);
여기 놀 a demo입니다.
하지만 테이블에 specific UID - NULL
의 조합 (여전히 InnoDB
을 사용한다고 가정)을 계속 삽입 할 수 있습니다. 예를 들어,이 쿼리는 ...
INSERT INTO users_orders o (uid) VALUES (1), (1);
... (기존 제약 조건을 위반하지 않으므로) 성공할 것입니다. 이 엄격히 금지되어야하는 경우
, 당신은 더 나은뿐만 아니라 users
및 orders
표에 몇 가지 더미 값 모두를 사용 - 당신의 교차 테이블의 foreign key
제약 사용할 수 있도록 할 수 있습니다.
사이드 노트로, 나는이 상황에 조금 놀랐다. 교차 테이블은 대개 NULL 가능 필드가 없도록 설계되어 있습니다. 예를 들어 주문이없는 사용자를 포함시키는 데 사용되는 쿼리에서 LEFT (또는 RIGHT) JOIN입니다. 이 결정 (OID를 사용할 수 없게 만드는 것)이 처음에 선택된 이유를 조금 설명 할 수 있습니까?
아이디어는 결제 정보를 저장하는 것입니다. 각 사용자에게는 기본 결제 정보가 있으며 각 주문에 대해 별도로 저장됩니다. 만약 당신이 그것을 저장하는 다른 방법을 조언한다면 나는 기꺼이 그것을 따라갈 것이다 ... – Anonymous
글쎄, 어떻게'uid'를'orders' 테이블에 추가하는 것이 적절하지 않다고 생각 하는가?) 각 주문 (내가 추측)에는 단 하나의 사용자가 할당되어 있습니다.그러면 모든 사용자와 그들의 주문 (LEFT JOIN을 통해 주문이 전혀없는 사용자를 포함하여)을 쉽게 조회 할 수 있습니다. – raina77ow
그건 의미가 있습니다. 각 주문 내에서 결제 정보도 저장할 수 있습니다. 하지만 기본 결제를 어디에 보관해야할까요? – Anonymous