2016-08-03 1 views
1

데이터베이스에 주소가 필요한 엔티티가 두 개 있습니다. 고객은 여러 개의 주소를 가질 수 있습니다. 레스토랑은 각 ID마다 하나의 주소를 가질 수 있습니다. 관계를 어떻게 구성해야합니까? 나는 현재 그것이 속한 사용자를 참조하는 주소 테이블을 가지고 있지만 식당에 속할 수도 있습니다.두 엔티티가있는 주소 테이블 공유

주소 :

CREATE TABLE IF NOT EXISTS grabatakeaway.address (
    `address_id` int(8) UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    `address` text NOT NULL, 
    `city` varchar(128) NOT NULL, 
    `state_province` varchar(128), 
    `zip_post` varchar(32) NOT NULL, 
    `username` varchar(32) NOT NULL, 
    FOREIGN KEY (username) REFERENCES grabatakeaway.user(username) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

사용자 :

CREATE TABLE IF NOT EXISTS grabatakeaway.user (
    `username` varchar(32) NOT NULL PRIMARY KEY, 
    `password` varchar(128) NOT NULL, 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

레스토랑 :

CREATE TABLE IF NOT EXISTS grabatakeaway.restaurant (
    `restaurant_id` int(8) UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    `address_id` int(8) UNSIGNED NOT NULL, 
    FOREIGN KEY (address_id) REFERENCES grabatakeaway.address(address_id) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

답변

2

당신은 '을 통해'테이블이 필요합니다.

CREATE TABLE IF NOT EXISTS (user_address 
     address_id int, 
     user_name varchar(32), 
     FOREIGN KEY (username) REFERENCES grabatakeaway.user(username), 
     FOREIGN KEY (address_id) REFERENCES grabatakeaway.address(address_id), 
     PRIMARY KEY (user_id,user_name)) 

주소 테이블에 사용자 이름이 필요하지 않습니다.

CREATE TABLE IF NOT EXISTS grabatakeaway.address (
    `address_id` int(8) UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    `address` text NOT NULL, 
    `city` varchar(128) NOT NULL, 
    `state_province` varchar(128), 
    `zip_post` varchar(32) NOT NULL, 
    FOREIGN KEY (username) REFERENCES grabatakeaway.user(username) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

사용자 테이블에 대한 자동 증분 ID 필드가있는 것이 좋습니다. 그러면 관통 테이블의 인덱스가 작을뿐만 아니라 작은 인덱스가됩니다.

+0

레스토랑은 어떨까요? 같은 것? –

+0

네, 똑같은. 이것은 many to many 관계를 만들고 restaturents는 또한 많은 주소를 가질 수 있습니다. 필요하지 않다면 현재 구조를 유지하십시오. – e4c5

+0

정말 고마워! 나는 이것을 수행 할 것이다. 모든 것이 좋은 것이라면 저는 이것을 답장으로 표시 할 것입니다, 환호! –

관련 문제