一列中的外键数组

j2datikz  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(255)

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

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 . 有什么办法吗?

pxyaymoc

pxyaymoc1#

对于多对多关系,你需要一个桥接表。
因此,添加 PersonEvent 表到您的模型

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

sczxawaw2#

这不是正确的方法。您需要从数据库规范化的Angular 考虑:您在 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);

桥接表包含一个自动递增的id、引用其他两个表的外键以及防止重复的唯一约束。
现在,假设您要列出所有参与给定事件的人员的姓名:

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

相关问题