比方说,我有3个表:
用户 - 图片 - 产品。
看起来像那样。如何轻松识别行是针对用户还是针对产品。
我的第一个解决方案是命名单个(ID)内部图像/封面表,并引用2个表并添加'type'
列字符串数据类型并只存储{其中包含{1}}和/或'user'
个字符串,以确定'product'
是'id'
还是user_id
。
除了将2个表引用到一个外键的明显错误之外。我的想法还有其他问题吗?
也许我可以添加两个(ID)。即,product_id
和user_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_type
和type_id
。
然后每当我插入图像表时,我都必须先查询type_name
列。
'type'
答案 0 :(得分:0)
拥有2列userId和productId并不是一个非常好的解决方案,因为它会有很多NULL
值,使用type
列可以避免这些值。此外,它不允许您添加任何图像类型,而无需为每种图像类型添加新列。
如果您的图像类型非常少而且您不打算添加更多图像类型,那么没有单独表格的type
列解决方案是个好主意。如果您想通过从代码中引用它们来添加更多内容(只要它们不是太多),您甚至可以使用此解决方案。
如果您想要一个可以轻松用于添加更多图像类型的通用解决方案,那么拥有单独表格的解决方案是3中最好的。
话虽这么说,您可以使用JSON列在与实体相同的表中保存多个图像路径(较新版本的MySQL允许查询JSON数据。您可以在此处找到更多相关信息The JSON datatype)