在下表中:http://sqlfiddle.com/#!9/a28b23/6/0
我应该选择哪种最佳设计?
大设计:
##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 岁以下人群与其他人建立单独的关系。
我猜您希望与任何人建立外键关系,无论其年龄如何。例如,您可能有一个单独的表,其中包含一个人所说的语言、一个人使用的昵称、一个人拥有的宠物、一个人用户的电子邮件等等。这些都与人们有关,无论他们的年龄如何。
这强烈建议使用一张表。
您可能想要做的是在 table 上为每组人员提供一个 View 。出于性能原因,您甚至可以按年龄组对表进行分区。
但是,没有先验理由将一个完全合理的实体拆分为两个不同的表。
一个重要的考虑因素是两个组是否有不同的安全要求。在表级别通常比在行级别更容易实现安全性,因此这将是一个考虑因素(尽管问题根本没有建议)。
关于mysql - 我应该选择带有 NULL 值的大表还是非 NULL 多表设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49097298/