我想大家都已经看过我以前的问题了。就是吐槽创业好难。自己能力不足,基本上我获得的经验都是segmentfault上面一个个提问得来的。在这里,我要感谢哪些帮助过我的人,不管是多么幼稚的问题都会有人热心的回答你。
当然,我又有了新问题。就是陌陌的八张头像,陌陌在后台是如何保存的(就是如何建表的)
我的技术见解非常肤浅,但是我估计陌陌个人资料根本就不是用mysql来保存的,而用的是mongodb。
当然,图片文件肯定是存在文件系统里面的,路径肯定是保存在表里面的嘛!!
而要用mysql保存的话:
CREATE TABLE travel_user_avatar(
userId INT UNSIGNED PRIMARY KEY NOT NULL COMMENT ' 用户的唯一id',
avatar0 VARCHAR(255) DEFAULT '',
avatar1 VARCHAR(255)DEFAULT '',
avatar2 VARCHAR(255)DEFAULT '',
avatar3 VARCHAR(255)DEFAULT '',
CONSTRAINT `useravatar` FOREIGN KEY (`userId`) REFERENCES `travel_user_meta` (`userId`) ON DELETE CASCADE ON UPDATE CASCADE
);
如果使用mysql,这样建表对吗?
最近做了一段时间的项目,还是发现了好多关系型数据库的不足。比如这个个人资料这一块,用非关系型数据库就要比关系型数据库要好很多啊!!
(本人才疏学浅,见笑)
先来说说可能的方式:
现在回答你的问题:如何建表才合适?
如果产品的功能是不会再变了(8图头像),则第二条是不合适的;
接着如果用户的个人资料是包含头像一起的(每次查询个人资料的结果都会包含头像),则第四条是不合适的,因为涉及到跨越不同的数据库类型,而查询个人资料往往在社交软件中是一个频繁的操作。
如果数据库设计中avatar要和别的表关联,那么第三条是非常蛋疼的。
下面是另一种情形:
如果头像不一定由8图组成,可能是4图,可能是9图,那么按照第一条的设计方式是不行的
如果在线用户非常多,拉取头像图片非常频繁,那么第5条相比其他方式的运营成本要少
也就是说 设计可能会存在完美的设计,但是并不一定适合你当时的需求。你可能只有1000人的在线数,但是你搞分库分表读写分离,这不是蛋疼吗。
请不要过度设计!
也就是说 我以上说的都是废话。。。因为我没有回答你的问题····
你还是得按照你对业务本身的理解和对数据的预期,来选择最符合你的模式