我是否使用带有NULL值的Big-Table或非NULL多表设计?

问题描述 投票:0回答:1

在下表中:http://sqlfiddle.com/#!9/a28b23/6/0

我应该选择哪种设计?

Big-One设计:

##BIG_ONE //ALL
SELECT * FROM  bigdocs ;

##BIG_ONE //18+
SELECT * FROM  bigdocs  WHERE age >= 18;

##BIG_ONE //18-
SELECT * FROM  bigdocs  WHERE age < 18;

或者多一设计:

##MULTI-ONE //ALL
SELECT * FROM  docs_18 
UNION ALL
SELECT  id ,  name ,  age , NULL, NULL FROM  docs ;

##MULTI-ONE //18+
SELECT * FROM  docs_18 ;

##MULTI-ONE //18-
SELECT * FROM  docs ;

##MULTI-ONE //18-
SELECT * FROM docs;

每个查询都提供一次使用而不是一次性使用,这是我应该使用的更好的设计?

mysql sql optimization query-optimization
1个回答
1
投票

起点是每行是否代表不同的实体。也就是说,如果你有外键关系,你会期望为18岁以下的人群与其他人建立单独的关系。

我猜你想要一个外键关系,无论年龄大小都是如此。例如,您可能有一个单独的语言表,一个人说话,一个人使用的昵称,一个人拥有的宠物,用户发送电子邮件等等。无论年龄大小,这都与人有关。

这强烈建议一个表。

您可能想要做的是在桌子上为每组人提供一个视图。出于性能原因,您甚至可以按年龄组对表进行分区。

但是,没有先验理由将完全合理的实体分成两个不同的表格。

一个重要的考虑因素是两组是否有不同的安全要求。在表级别执行安全性通常比在行级别更容易执行,因此这将是一个考虑因素(尽管问题没有提出)。

© www.soinside.com 2019 - 2024. All rights reserved.