правильный способ структурирования таблицы один ко многим php mysql - PullRequest
0 голосов
/ 05 мая 2018

Скажите, у меня есть таблица lawareas для областей права, например:

ID Area
1  Children Law
2  EU law
3  Crime

А также юристы, но каждому юристу может быть назначено несколько областей юриспруденции, поэтому таблица выглядит как

ID Name Areas
1  John 1,3
2  Bob  2,3

Так я сейчас и поступаю, но, похоже, неправильно.

Есть ли лучший способ структурировать эти данные?

Полагаю, у меня может быть третья таблица со связями между двумя вышеупомянутыми таблицами, например:

AreaID LawyerID
1      1
3      1
2      2
3      2

Что лучше и почему, оригинальный вариант кажется мне менее хлопотным во всех отношениях?

1 Ответ

0 голосов
/ 06 мая 2018

В первом решении вы выражаете семантику данных через конкатенацию строк. Это имеет серьезные недостатки:

  • запрашивать данные будет громоздко (например, привлечь всех юристов, которые осуществляют уголовное право)

  • добавление и удаление областей для юристов обременительно (так как вы должны выполнять разбор и объединение строк)

  • вы должны позаботиться о согласованности данных самостоятельно (например, все идентификаторы областей должны существовать в таблице областей)

По сути, вы теряете все функции, которые предлагает ваша СУБД, за исключением общего хранения и извлечения данных. В итоге вы получите ужасный код приложения, в котором вы повторно реализуете эту функциональность, плохую производительность и, скорее всего, несоответствие данных.

Пусть база данных сделает то, что она может сделать для вас, но вы должны соответствовать ее структурным требованиям для этого.

...