有两个对象,个人person、活动event。每个person可以参加多个event,每个event可以由多person参加。数据库表格如下:
event
- id [int (4),primary]
- name [varchar (30)]
- …
person
- id [int (4),primary]
- name [varchar (30)]
- mail [varchar (60),unique]
- attends [Array of events.id]
如果要将这两张表进行关联,需要在person和event之间构造关系表。
CREATE TABLE attendance (id INT AUTO_INCREMENT,person_id INT NOT NULL,event_id INT NOT NULL,PRIMARY KEY (id),FOREIGN KEY fk_person (person_id) REFERENCES person (id),FOREIGN KEY fk_event (event_id) REFERENCES event (id)
);
ALTER TABLE attendance
ADD CONSTRAINT attendance_pk UNIQUE (person_id, event_id);
两个外键分别关联到person、event。
如果需要查询参加具体活动event所有人person的姓名,sql语句如下:
SELECT p.name
FROM event AS eINNER JOIN attendance AS a ON a.event_id = e.idINNER JOIN person AS p ON p.id = a.person_id
WHERE e.name = 'The Foo Event';