Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/MySQL关系表建议_Php_Mysql_Codeigniter - Fatal编程技术网

PHP/MySQL关系表建议

PHP/MySQL关系表建议,php,mysql,codeigniter,Php,Mysql,Codeigniter,我只是想知道我是否可以从以下方面得到一些建议: 我正在CodeIgniter中构建一个站点,其中存在一个内容类型“公文包\项目”。 通过复选框控件,可以在3个位置显示相同的投资组合项目: 主页、会员页面和客户端页面 我只是想知道在数据库中实现这种关系的最佳方法是什么。我可以为上面的每一个场景设置3个关系表,但对我来说,这似乎有些过分(这个站点非常小) 我正在考虑使用一个包含以下字段的关系表: type (homepage, client or member) show_on_id portfol

我只是想知道我是否可以从以下方面得到一些建议:

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

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

我正在考虑使用一个包含以下字段的关系表:

type (homepage, client or member)
show_on_id
portfolio_id
类型字段的目的是确定从哪个表(客户端或成员)检索“show_on_id”,如果类型是homepage,则不需要show_on_id


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

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

如果有多个,则使用链接表,如果只有一个使用直接外键字段链接到公文包


我会建议不要使用一个链接表为所有三个基于个人经验,正是这样的设计和问题,可能会出现以后

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

如果您不想再添加任何部分,那么最好使用portfolio表:

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或其他表来定义公文包可以显示的位置