一列外键数组

时间:2019-01-02 22:10:25

标签: mysql phpmyadmin

我有两种不同类型的对象,例如事件。每个人都可以参加多个活动。我想要两个桌子

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.attends应该是长度为4的整数数组,我想告诉MySQL该数组中的每个值都是event.id的外键。有什么办法吗?

2 个答案:

答案 0 :(得分:1)

您需要具有用于多对多关系的桥接表。

因此,将PersonEvent表添加到模型中

PersonEvent
- EventId      [int (4),primary]
- PersonId     [int (4),primary]

答案 1 :(得分:0)

这不是继续进行的正确方法。您需要用database normalization来思考:personevent之间存在一种关系,其中每个人可能有很多事件,每个事件可以有很多人。建模 关系,您需要一个桥接表,例如:

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);

bridge表包含一个自动递增的id,引用其他2个表的外键以及一个防止重复的唯一约束。

现在,假设您要列出参加给定事件的所有人员的姓名:

SELECT p.name
FROM 
    event AS e
    INNER JOIN attendance AS a ON a.event_id = e.id
    INNER JOIN person AS p ON p.id = a.person_id
WHERE e.name = 'The Foo Event';