Таблица SQLite с многозначными атрибутами
Я хотел бы создать таблицу, которая может хранить, скажем, заголовок или имя чего-либо в первом столбце, а затем связывать людей или объекты в следующем столбце. Проблема в том, что может быть несколько человек, связанных с одним и тем же названием или названием. Если этот первый столбец является моим первичным ключом, я не могу иметь дубликаты для каждой строки.
Name1 | Jim
| John
| Jill
Name2 | Mike
| Mary
Name3 | Jeff
Нужно ли это делать с промежуточными таблицами, и если да, то я не очень понимаю, как на самом деле их кодировать (в sqlite). Я просто создаю их с внешними ключами, ссылающимися на соответствующий атрибут в основной таблице? Любая помощь будет оценена.
3 ответа
Да, в SQLite (или любой реляционной базе данных) вы бы смоделировали это, создав отдельные таблицы. В реляционной модели является серьезным преступлением - хранить две части информации в одном столбце.
Трудно дать более точный ответ на ваш вопрос, потому что вы не включаете никаких подробностей, но, скорее всего, вам понадобится одна таблица для хранения интересующих вас "вещей", одна таблица для хранения информации о людях (одна строка на человека) и третья таблица "связывания", связывающая людей с "вещами".
Эта третья таблица содержит только столбцы, которые составляют первичный ключ таблицы "вещи", и столбцы, которые составляют первичный ключ таблицы сотрудников. Первичный ключ этой таблицы состоит из всех столбцов (возможно, двух столбцов, если "вещи" и люди идентифицируются одним столбцом в исходной таблице), и содержит два внешних ключа, один обратно для "вещей" и один людям.
Добавляется одна строка, чтобы связать человека с вещью, но можно добавить дополнительные строки, чтобы связать больше людей с указанной вещью и больше вещей с каждым человеком.
Другой вариант - использовать СУБД, специально разработанную для поддержки нескольких значений в одном поле. Есть несколько вариантов на выбор, включая как минимум один вариант с открытым исходным кодом. Посмотрите на d3, программное обеспечение ракеты (СУБД U2), Ladybridge (open qm) и поищите в Google многозначные СУБД.
Это хорошо поддерживается MySQL 8.0.17+ за счет сохранения ваших значений в массиве JSON и добавления многозначного индекса .