微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 数据库设计:使用uid或两个字段连接

方法1:

CREATE TABLE `ads` (
  `idads` int(11) NOT NULL AUTO_INCREMENT,
  `idobject` int(11) NOT NULL,
  `ad_type` enum('SALE','RENT','NEWHOUSING','GBUY','LAND','FIXMOVE') DEFAULT 'SALE',
)

CREATE TABLE `house` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uid` varchar(15) DEFAULT NULL,

选择“销售”数据

SELECT * FROM ads a JOIN house h on (h.id = a.idobject) WHERE a.ad_type = 'SALE';

方法2

CREATE TABLE `ads` (
  `idads` int(11) NOT NULL AUTO_INCREMENT,
  `uid` varchar(15),


CREATE TABLE `house` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uid` varchar(15) DEFAULT NULL,

要选择’销售’数据:

 SELECT * FROM ads a JOIN house h on (a.uid=h.uid);

method2中的uid已经拥有data_type的信息.

我有点混淆哪种是最佳做法:
Method1似乎更快,但需要指定ad_type =’SALE’;
Method2似乎更简单,只需要加入uid,但似乎更慢?这是真的吗?

一个是最佳实践?哪个性能更好?还是没有什么不同?
PS.我对表广告进行了规范化,因为它会与桌子,桌面,桌子新房等一起加入.表格广告将存储ads_start_date,ads_end_date和其他有用的信息.

解决方法:

处理这样的设计问题最有用的方法是考虑您的应用程序是否需要能够处理所有广告 – 无论是销售,租赁,土地等 – .如果您需要这样做,您的第一个选择是最佳选择.

如果将土地广告,出租物业广告等放入自己的表格更有意义,那么您的第二种选择最好.看来你已经用自己的家用餐桌做了那种事情.但那是我的猜测.

当您可以轻松加入普通的自动增量id列时,加入uuids不是最佳做法.当你有一个非常好的’id唯一密钥时,使用uuid作为代理唯一密钥只是额外的工作和存储.

最佳做法是统一命名您的id列 – 主键列.也就是说,使用house表中的house.house_id和ads表中的ads.house_id.当你这样做时,更容易阅读和检查你的sql代码.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐