Php 数据库设计:使用uid或两个字段联接
方法1: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,
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,但没关系,我明白你的意思。谢谢