PHP / MySQL关系表建议

时间:2011-02-10 09:06:18

标签: php mysql codeigniter

我只是想知道我是否可以就以下内容得到一些建议:

我正在CodeIgniter中构建一个网站,其中存在内容类型“portfolio_item”。 可通过复选框控件在3个位置显示相同的投资组合项: 主页,会员页面和客户页面。

我只是想知道在数据库中实现这种关系的最佳方法是什么。我可以为上述每个场景设置3个关系表,但对我来说这似乎有点过分(网站很小)。

我正考虑将一个关系表与以下字段一起使用:

type (homepage, client or member)
show_on_id
portfolio_id

type字段的意图是确定从(客户端或成员)检索“show_on_id”的表,如果类型是主页,则不需要show_on_id。

这样做有什么明显的缺点吗?

2 个答案:

答案 0 :(得分:3)

是的,有一点不利。对于相同的设置,最终可能会有多行,每个行可能互相矛盾。因此,如何在此表中插入行非常重要。

如果您不再添加任何部分,可能还有投资组合表:

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)

如果您要添加更多可以在以后显示投资组合的地方,或者这些地方是动态的,您的方法将有效。我只是将'type'更改为'place',因为这更容易理解,然后使用ENUM或其他表来定义投资组合可以显示的位置。

答案 1 :(得分:0)

每个地点可以有一个或多个投资组合项目吗?

如果多,请使用链接表,如果只有一个使用直接外键字段链接到投资组合。

我建议不要根据个人经验使用一个链接表来完成这些设计以及以后可能出现的问题。