Советы по таблице отношений PHP / MySQL - PullRequest
1 голос
/ 10 февраля 2011

Мне просто интересно, могу ли я получить совет по поводу следующего:

Я создаю сайт в CodeIgniter, в котором существует тип контента "portfolio_item". Один и тот же элемент портфолио может отображаться в 3 местах с помощью флажков: Домашняя страница, Страница участника и Страница клиента.

Мне просто интересно, как лучше всего реализовать эти отношения в базе данных. Я мог бы иметь 3 таблицы взаимосвязей для каждого из вышеупомянутых сценариев, но мне кажется, что это излишне (сайт довольно маленький).

Я думал об использовании одной таблицы отношений со следующими полями:

type (homepage, client or member)
show_on_id
portfolio_id

Назначение поля типа - определить, из какой таблицы извлекать "show_on_id" (из клиентов или членов), если типом является домашняя страница, тогда show_on_id не требуется.

Есть ли явный недостаток в том, чтобы делать это таким образом?

Ответы [ 2 ]

3 голосов
/ 10 февраля 2011

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

Если вы не добавите больше разделов, может также быть таблица портфолио:

CREATE TABLE `portfolio`
(`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`content` TEXT NULL,
`showHome` BOOLEAN NULL,
`showClient` BOOLEAN NULL,
`showMember` BOOLEAN NULL)

А затем таблицакоторый связывает пользователей с их портфелями,

CREATE TABLE `portfolio_user`
(`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`portfolio` INT NOT NULL,
`user` INT NOT NULL)

Если вы собираетесь добавить больше мест, где портфель может быть отображен позже, или если эти места являются динамическими, ваш метод будет работать.Я просто изменил бы «тип» на «место», поскольку это легче понять, а затем либо использовал ENUM, либо другую таблицу, чтобы определить места, в которых портфель может быть показан.

0 голосов
/ 10 февраля 2011

Может ли быть один или несколько элементов портфеля для каждого местоположения?

Если их много, используйте таблицы ссылок, если только одно поле прямого внешнего ключа используется для ссылки на портфель.совет не использовать одну таблицу ссылок для всех трех, основанную на личном опыте именно с такими конструкциями и проблемами, которые могут возникнуть позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...