php - 数据库设计: join with uid or with two fields

标签 php mysql database

方法一:

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,

选择'SALE'数据

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

方法二

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';
方法2好像比较简单,只需要用uid join,但是好像比较慢?是真的吗?

哪个是最佳实践?哪个性能更好?或者根本没有什么不同?
附言。我将表格广告标准化,因为它将与表格房屋、表格土地、表格新房等结合在一起。表格广告将存储 ads_start_date、ads_end_date 和其他有用信息。

最佳答案

处理此类设计问题的最有用方法是考虑您的应用程序是否需要能够处理您所有的广告——无论是销售、租金、土地等,- - 一起。如果您需要这样做,您的第一个备选方案是最佳选择。

如果将土地广告、出租属性(property)广告等放入他们自己的表格中更有意义,那么您的第二种选择是最好的。看起来您已经对您的house 表做了这种事情。但这是我的猜测。

当您可以轻松加入普通的自动递增 id 列时,不是在 uuid 上加入的最佳实践。当您拥有完美的 'id 唯一 key 时,使用 uuid 作为代理唯一 key 只是额外的工作和存储。

最佳做法是统一命名您的 ID 列——您的主键列。即,在 house 表中使用 house.house_id,在 ads 表中使用 ads.house_id。这样做会更容易阅读和检查您的 SQL 代码。

关于php - 数据库设计: join with uid or with two fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18871216/

相关文章:

php - 使用 haproxy 和 php websocket 执行查询

php - 使用查询构建器删除两个表之间的链接

PHP:在for循环中增加变量名称

MySQL 从 2 个表中删除记录

swift - Xcode Swift在项目中使用.db数据库

mysql - 有没有比通过 ID 更快的方法来查询数据库中的特定条目?

PHP 意外的输入结束错误

java - 使用 Jframe 创建数据库,出现异常未知数据库选择

mysql - 这个MySQL语法的错误在哪里?

php - 更改图像或使用 php 表单保留旧图像