使用“类型”列标识我的表格行

时间:2018-03-17 03:02:11

标签: php mysql codeigniter

比方说,我有3个表:

用户 - 图片 - 产品。

Tables

看起来像那样。如何轻松识别行是针对用户还是针对产品。

我的第一个解决方案是命名单个(ID)内部图像/封面表,并引用2个表并添加'type'字符串数据类型并只存储{其中包含{1}}和/或'user'个字符串,以确定'product''id'还是user_id

除了将2个表引用到一个外键的明显错误之外。我的想法还有其他问题吗?

也许我可以添加两个(ID)。即,product_iduser_id并将两者声明为NULL。我将能够确定该行属于哪个表。

如果product_id的值为'1'user_id NULL ,则该行属于用户。

用于插入用户封面/图像的示例控制器/型号代码段。

控制器:

product_id

型号:

$insert['user_id'] = $this->user_id;
$insert['product_id'] = NULL;
$insert['original'] = $image_name;
$insert['thumbnail'] = $this->upload->data('raw_name').'_thumb';

$image_id = $this->model->insert_cover($insert);

if($image_id > 0){//do something }

我有将图片上传到我的项目文件夹public function insert_cover($data){ $query = $this->db->insert('cover/image', $data); if($query){ return $this->db->insert_id(); }else{ return 0; } } 的默认要求,但我希望将所有产品图片显示为 200x200 ,并将所有用户图片显示为 100x100 所以我在codeigniter中使用了image_lib来调整原始上传图像的大小,调整后的图像会自动命名为后缀'/assets/uploaded_images/'

然后我将原始文件和缩略图的文件名存储到我的数据库中,当我在我的视图中显示它时,我只需添加一个网址字符串

'_thumb'

无论如何,那么我在这里申请的最佳方法是什么,可以轻松识别该行属于哪个表?

我是否选择带有NULL值的2 id?我添加一个字符串'type'列?

但为什么我觉得它俗气/松散?每当我插入一些我必须添加的东西:

$cover = 'http://localhost/project_name/assets/uploaded_images/'.$file_name

我认为是因为我无法控制'type'列。

如果我添加另一个名为$insert['type'] = 'user'; image_type的表格有2列,该怎么办?即,cover_typetype_id

然后每当我插入图像表时,我都必须先查询type_name列。

'type'

1 个答案:

答案 0 :(得分:0)

拥有2列userId和productId并不是一个非常好的解决方案,因为它会有很多NULL值,使用type列可以避免这些值。此外,它不允许您添加任何图像类型,而无需为每种图像类型添加新列。

如果您的图像类型非常少而且您不打算添加更多图像类型,那么没有单独表格的type列解决方案是个好主意。如果您想通过从代码中引用它们来添加更多内容(只要它们不是太多),您甚至可以使用此解决方案。

如果您想要一个可以轻松用于添加更多图像类型的通用解决方案,那么拥有单独表格的解决方案是3中最好的。

话虽这么说,您可以使用JSON列在与实体相同的表中保存多个图像路径(较新版本的MySQL允许查询JSON数据。您可以在此处找到更多相关信息The JSON datatype