Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数据库设计:使用uid或两个字段联接_Php_Mysql_Database - Fatal编程技术网

Php 数据库设计:使用uid或两个字段联接

Php 数据库设计:使用uid或两个字段联接,php,mysql,database,Php,Mysql,Database,方法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,

方法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,
  `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,
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);
方法2中的uid已具有数据类型的信息

我有点搞不清哪一个是最佳实践:
Method1似乎更快,但需要指定ad_类型='SALE'
Method2似乎更简单,只需要加入uid,但似乎更慢?这是真的吗

哪一个是最佳实践?哪个性能更好?或者根本没什么不同

PS.I规范化表格广告,因为它将与表格房屋、表格土地、表格新房等连接。表格广告将存储广告开始日期、结束日期和其他有用信息广告<代码>——无论是销售、租金、土地等等。如果你需要这样做,你的第一个选择是最好的选择

如果将土地广告、租赁房产广告等放在他们自己的表格中更有意义,那么你的第二个选择是最好的。看来你已经用你的
房子
桌子做过类似的事情了。但这是我的猜测

在UUID上进行连接不是最佳做法,因为您可以轻松地在普通的自动递增
id
列上进行连接。当您拥有非常好的
'id
唯一密钥时,使用uuid作为代理唯一密钥只是额外的工作和存储


最佳做法是统一命名id列(主键列)。也就是说,在
house
表中使用
house.house\u id
,在
ads
表中使用
ads.house\u id
。这样做可以更容易地阅读和检查SQL代码。

如果表中有一个自动递增的
id
,我强烈建议您将其作为主键:

CREATE TABLE `ads` (
  `idads` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
------------------------------------------^
  `idobject` int(11) NOT NULL,
  `ad_type` enum('SALE','RENT','NEWHOUSING','GBUY','LAND','FIXMOVE') DEFAULT 'SALE',
);
一般来说,我赞成第一种方法。自动递增的主键没有其他信息,例如嵌入的
ad\u类型
code。在第二种方法中,名为“uid”(我认为它实际上应该是“用户id”)的东西有两个用途。它试图成为一个唯一的键,并试图对类型信息进行编码


我强烈支持将类型信息作为显式列。

是的,我的表ads将IDAD作为主键,但thx提醒我:)。哦,我的uid应该是uuid。不是用户id,但没关系,我明白你的意思。谢谢