在下表中: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;
每个查询都提供一次使用而不是一次性使用,这是我应该使用的更好的设计?
起点是每行是否代表不同的实体。也就是说,如果你有外键关系,你会期望为18岁以下的人群与其他人建立单独的关系。
我猜你想要一个外键关系,无论年龄大小都是如此。例如,您可能有一个单独的语言表,一个人说话,一个人使用的昵称,一个人拥有的宠物,用户发送电子邮件等等。无论年龄大小,这都与人有关。
这强烈建议一个表。
您可能想要做的是在桌子上为每组人提供一个视图。出于性能原因,您甚至可以按年龄组对表进行分区。
但是,没有先验理由将完全合理的实体分成两个不同的表格。
一个重要的考虑因素是两组是否有不同的安全要求。在表级别执行安全性通常比在行级别更容易执行,因此这将是一个考虑因素(尽管问题没有提出)。