을 여기에 대한 가고 싶어 방법은 찾을 users.userid = plants.userid_fk에 가입 :
userid
username
DOB
gender
etc
과 식물
이 예제 데이터베이스 스크립트 및 쿼리 :
사용자 만들기 /로드 사용자 테이블 대신 대리자 기본 키를 사용하기 때문에 쿼리가 INTs에 대해 더 빠를 것이고 그들은 아마도 변경 될 수 있습니다 .
CREATE TABLE users (
id int(11) AUTO_INCREMENT NOT NULL,
username varchar(255) NOT NULL,
gender char(1) NULL,
PRIMARY KEY(id)
) ENGINE = MyISAM AUTO_INCREMENT = 3
로드 사용자
INSERT INTO users(id, username, gender)
VALUES(1, 'john', NULL)
GO
INSERT INTO users(id, username, gender)
VALUES(2, 'jane', NULL)
GO
이 식물에게
CREATE TABLE plants (
id int(11) AUTO_INCREMENT NOT NULL,
name varchar(200) NOT NULL,
PRIMARY KEY(id)
) ENGINE = MyISAM AUTO_INCREMENT = 6
로드 식물
INSERT INTO plants(id, name)
VALUES(1, 'fern1')
GO
INSERT INTO plants(id, name)
VALUES(2, 'fern2')
GO
INSERT INTO plants(id, name)
VALUES(3, 'orchid1')
GO
INSERT INTO plants(id, name)
VALUES(4, 'orchid2')
GO
INSERT INTO plants(id, name)
VALUES(5, 'lilly1')
만들기
조인 테이블 만들기 너무 많은 웹 플랫폼이 2 열 기본 조인 테이블을 제대로 업데이트하지 않기 때문에 여기서 대리 키를 사용합니다. 또한, 이러한 유형의 조인에 메타 데이터/세부 정보를 추가하는 일이 자주 발생했으며,이 작업 없이는 지저분 해졌습니다. 참고 동일한 플랜트 유형을 추가하는 동일한 사용자의 조합을 제한하지는 않지만 쉽게 할 수 있습니다.
CREATE TABLE plants_users (
id int(11) AUTO_INCREMENT NOT NULL,
plant_id int(11) NOT NULL,
user_id int(11) NOT NULL,
PRIMARY KEY(id)
)
ENGINE = MyISAM
AUTO_INCREMENT = 8
GO
CREATE INDEX fk_plant_id USING BTREE
ON plants_users(plant_id)
GO
CREATE INDEX fk_user_id USING BTREE
ON plants_users(user_id)
로드 표 가입
INSERT INTO plants_users(id, plant_id, user_id)
VALUES(1, 1, 1)
GO
INSERT INTO plants_users(id, plant_id, user_id)
VALUES(2, 2, 1)
GO
INSERT INTO plants_users(id, plant_id, user_id)
VALUES(3, 3, 1)
GO
INSERT INTO plants_users(id, plant_id, user_id)
VALUES(4, 4, 1)
GO
INSERT INTO plants_users(id, plant_id, user_id)
VALUES(5, 2, 2)
GO
INSERT INTO plants_users(id, plant_id, user_id)
VALUES(6, 3, 2)
GO
INSERT INTO plants_users(id, plant_id, user_id)
VALUES(7, 5, 2)
최종 쿼리 :
select
users.username,
plants.name
from
users,plants,plants_users
where
users.id = plants_users.user_id and
plants.id = plants_users.plant_id
결과 :
user name
john fern1
john fern2
john orchid1
john orchid2
jane fern2
jane orchid1
jane lilly1
이유가 있습니까? 이것은 정상적인 형태의 데이터베이스를 파괴하는 것으로 보입니다. – symcbean
@symcbean 무엇이 잘못 되었습니까? 내가 사용하는 많은 데이터베이스처럼 보입니다. – gnur
플랜트 테이블에서 _fk 접미어를 userid에 제안하는 이유는 무엇입니까? – pepe