方法一:
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/