加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 更好的替代mysql中的逗号分隔字段

发布时间:2020-12-13 21:46:22 所属栏目:PHP教程 来源:网络整理
导读:在我的应用程序中,每当用户上传壁纸时,我需要将该壁纸裁剪成 3种不同的尺寸,并将所有这些路径(裁剪图像的3条路径和原始上传壁纸的1条路径)存储到我的数据库中. 我还需要存储原始壁纸(由用户上传的一个)的tinyurl. 在解决上述问题的同时,我提出了以下表格结构
在我的应用程序中,每当用户上传壁纸时,我需要将该壁纸裁剪成
3种不同的尺寸,并将所有这些路径(裁剪图像的3条路径和原始上传壁纸的1条路径)存储到我的数据库中.
我还需要存储原始壁纸(由用户上传的一个)的tinyurl.

在解决上述问题的同时,我提出了以下表格结构.

CREATE TABLE `wallpapermaster` (
  `wallpaperid` int(10) unsigned NOT NULL AUTO_INCREMENT,`userid` bigint(20) NOT NULL,`wallpaperloc` varchar(100) NOT NULL,`wallpapertitle` varchar(50) NOT NULL,`wallpaperstatus` tinyint(4) DEFAULT '0' COMMENT '0-Waiting,1-approved,2-disapproved',`tinyurl` varchar(40) NOT NULL
) ENGINE=MyISAM

wallpaperloc是一个逗号分隔字段,由原始壁纸位置和所有裁剪实例的位置组成.

我知道在关系数据库的世界中使用逗号分隔的字段被认为是一个糟糕的设计,所以你想建议一些其他整洁有效的方法吗?

解决方法

在wallpapermaster和位置表之间使用1:n关系.

像这样的东西:

CREATE TABLE wallpapermaster (
  wallpaperid     int unsigned NOT NULL AUTO_INCREMENT,userid          bigint NOT NULL,wallpaperloc    varchar(100) NOT NULL,wallpapertitle  varchar(50) NOT NULL,wallpaperstatus tinyint DEFAULT '0' COMMENT '0-Waiting,primary key (wallpaperid)
) ENGINE=InnoDB;


CREATE TABLE wallpaperlocation (
  wallpaperid  int unsigned NOT NULL,location     varchar(100) NOT NULL,tinyurl      varchar(40),constraint fk_loc_wp 
      foreign key (wallpaperid) 
      references wallpapermaster (wallpaperid),primary key (wallpaperid,location)
) ENGINE=InnoDB;

wallpaperlocation中的主键确保无法插入相同的位置两次.

请注意,int(10)不定义任何数据类型约束.它仅仅是客户端应用程序的提示,指示该数字具有多少位数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读