Массив внешних ключей в одном столбце - PullRequest
0 голосов
/ 03 января 2019

У меня есть два разных типа объектов, скажем, событие и персона .Каждый человек может посетить несколько мероприятий.Я хочу иметь две таблицы

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 голосов
/ 03 января 2019

Это неправильный способ продолжить. Вы должны думать с точки зрения нормализации базы данных : у вас есть отношения между 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);

Таблица моста содержит автоинкрементный идентификатор, внешние ключи, которые ссылаются на 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';
0 голосов
/ 03 января 2019

вам нужно иметь таблицу моста для отношений «многие ко многим».

Таким образом, добавьте PersonEvent Таблица к вашей модели

PersonEvent
- EventId      [int (4),primary]
- PersonId     [int (4),primary]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...