2017-02-14 3 views
0

Я очень новичок в mySQL, поэтому извиняюсь, если это глупый вопрос. В настоящее время я работаю над веб-инструментом электронного обучения. Вместо линейного перехода от Части I к Части II и т. Д. Вместо этого последовательность частей определяется взаимозависимостью, например, Часть II может зависеть только от Части I, тогда как Часть IV может зависеть от частей I и III и т. Д.Сохранение списка значений в записи mySQL

В настоящее время у меня есть таблица, содержащая несколько ссылок на более высоком уровне, и вторая таблица, содержащая всю информацию для всех частей, по одной записи на каждую часть (каждая часть содержит данные в очень гомогенизированной и четко определенной форме, поэтому это уместно). Я надеялся, что у меня может быть одно поле, способное удерживать список чисел произвольной длины, позволяя любой данной части зависеть от произвольного количества других частей. Есть ли простой способ достичь этого, или мне лучше всего сохранить это как список с разделителями-запятыми в строке и разбор его в php?

Большое спасибо за любые указатели заранее!

+0

Если выбор чисел предопределены и не изменится, вы можете посмотреть на '' типов ENUM' данных MySQL, SET' торцевыми. Тем не менее, это обычно не рекомендуется использовать их по разным причинам. Поэтому, если вы хотите сделать это полностью «правильным», вам будет лучше использовать справочные таблицы. – Connum

+1

Возможный дубликат [Является ли сохранение разделительного списка в столбце базы данных действительно так плохо?] (Http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database-column- действительно-то-плохо) – Shadow

ответ

1

Я думаю, вы могли бы достичь этого, имея ассоциативную сущность (например, part_dependency), которая должна иметь один внешний ключ для part_id, а другой для depend_part_id).

В диаграмме схема вашего объекта будет содержать таблицу деталей и ассоциативную сущность; таблица деталей будет относиться к ассоциативной сущности дважды (один раз для первого внешнего ключа, а затем снова для второго внешнего ключа).

UPDATE: Добавлена ​​схема enter image description here

+0

Если я правильно понял, у меня была бы одна запись в моей таблице part_dependency для каждой зависимости? – srthompers

+0

Да, но вы могли бы создать несколько записей Part_Dependency, где Part_id будет одинаковой, но каждый раз, когда Dependent_part_id будет отличаться. Поэтому, принимая ваш оригинальный пример, где часть IV зависит от частей I и III, потребуется 2 записи Part_Dependency: Part_Dependency_id = 1, Part_id = IV, Dependent_part_id = I; Part_Dependency_id = 2, Part_id = IV, Dependent_part_id = III. Затем вы можете запросить это с помощью чего-то по строке Select Dependent_part_id из Part_Dependency, где Part_id = IV, чтобы дать вам результат I и III. – asugrue15

+0

Затем вы также можете запросить, чтобы узнать все части, которые данная часть является зависимой. Например, вы можете увидеть все части, где часть III является зависимой, запросив что-то вроде Select Part_id из Part_Dependency, где Dependent_part_id = III. Имеет ли это смысл? – asugrue15

Смежные вопросы