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代码.

点赞