2015-01-19 3 views
0

저는 데이터베이스가 처음이므로 뭔가 도움이 필요했습니다. 모든 이벤트에 대한 정보가 포함 된 데이터베이스가 하나 있습니다. 예를 들어 행마다 서로 다른 이벤트를 설명하는 행이 있습니다.SQL을 사용하면 자동으로 테이블 만들기

이제 이벤트에 참석하는 사용자를 추적해야합니다. 그럼 어떻게 설계할까요? 나는 어떤 방법이 있다면, 새로운 행이 이벤트 테이블에 추가 될 때마다 그 하나의 이벤트를 위해 새로운 테이블을 생성하도록 생각했다. 그렇게 할 수 있습니까? 또는 주 이벤트 테이블에 쉼표 또는 세미콜론으로 구분 된 사람의 이름을 가진 열을 추가하는 것이 좋습니다. 또는 각 행에 이벤트가 참석하는 상태에서 각 사용자별로 테이블을 만드는 것이 더 낫습니까?

미리 감사드립니다.

답변

2

이 일을 더 좋은 방법은 같은 뭔가를하는 것 다음

Create table events( 
    id integer, 
    <OTHER EVENT DETAILS HERE (i.e. start time, location, duration etc> 
    primary key (event_id) 
); 

Create table users(
    id integer, 
    <OTHER USER DETAILS HERE (i.e. name, email, phone etc)> 
    primary key (user_id) 
); 

CREATE TABLE event_users(
    event_id integer, 
    user_id integer, 
    <OTHER USER/EVENT DETAILS HERE (i.e. ticket price paid etc)> 
    Primary Key (event_id,user_id), 
    Foreign Key (event_id) REFERENCES events(id), 
    Foreign Key (user_id) REFERENCES users(id) 
); 

이벤트가 0 또는 많은 사용자가 참석 사용자가 0 또는 여러 이벤트에 참여 할 수 있으며 작성할 필요가없는 수 있습니다이 방법 더 많은 테이블. 당신은 다 대다 관계를 매핑하는 것처럼 소리

SELECT U.id 
FROM User U, UserEvent UE 
WHERE U.id = UE.user_id 
AND UE.event_id = <event id you want to search for>; 
+0

죄송 합니다만 늦어서 문의하십시오.하지만 event_users 테이블에 행을 어떻게 추가 하시겠습니까? "INSERT INTO event_users VALUES (123, 123)"을 할 수 있습니까? 아니면 뭔가 다른가요? –

+1

맞습니다. 표준 삽입물입니다. "event_id"및 "user_id"는 외래 키이므로 이벤트 및 사용자 테이블에 각각 존재하지 않는 두 필드에 값을 삽입 할 수 없음을 의미합니다. –

+0

아, 아주 좋아. 예를 들어 사용자를 삭제한다고 가정 해 보겠습니다. 그는 event_users 테이블에서도 사라질 것입니까? –

1

... 주 이벤트 테이블에 쉼표 또는 세미콜론으로 구분 된 사람의 이름을 추가하는 것이 좋습니다.

joins 처음에는 테이블 간의 관계에 도움이 될 수 있습니다. relational table과 함께 이벤트 테이블 및 사용자 테이블을 만들어 어떤 사용자가 어떤 이벤트를 추적했는지 추적 할 수 있습니다. 이렇게하면 쉼표로 된 사용자 목록을 가질 필요가 없습니다 (전혀 수행하지 못함).

다른 테이블에 하나의 이벤트 테이블이있는 것이 좋습니다. 각 이벤트에 동일한 정보가 포함되어있어 합리적인 의미가있을 것이라고 확신합니다.

즉석에서 테이블을 만드는 것은 혼란과 복잡성을 유발할뿐입니다.

1

:

방법, 데이터가 같은 것 얻을 것입니다. 각 사용자는 하나 이상의 이벤트에 참석할 수 있으며 각 이벤트에는 1 명 이상의 사용자가 참여할 수 있습니다. 하나의 옵션은 세 개의 테이블을 갖는 것입니다. 표 1 : 각 이벤트를 설명하는 이벤트. 표 2 : 각 사용자를 설명하는 사용자 표 3 : 중간 사용자가 될 EventUsers. 이 테이블에는 이벤트의 기본 키와 사용자의 기본 키라는 적어도 두 개의 열이 있습니다.

관련 문제