我目前正在编写我真正的第一个 PHP 应用程序,我想知道如何正确地项目/设计/实施 MySQL 视图;
在我的特殊情况下,用户数据分布在多个表中(由于数据库规范化),我正在考虑使用视图将数据分组到一个大表中:
CREATE VIEW `Users_Merged` (
name,
surname,
email,
phone,
role
) AS (
SELECT name, surname, email, phone, 'Customer'
FROM `Customer`
)
UNION (
SELECT name, surname, email, tel, 'Admin'
FROM `Administrator`
)
UNION (
SELECT name, surname, email, tel, 'Manager'
FROM `manager`
);
这样我可以轻松地使用来自 PHP 应用程序的视图数据,但我真的不知道这会对性能产生多大影响。
例如:
SELECT * from `Users_Merged` WHERE role = 'Admin';
是过滤视图数据的正确方法还是应该在创建视图本身之前过滤?(我需要这个有一个用户列表和按角色过滤它们的功能)。
编辑
具体来说,我想要获得的是将三个表非规范化为一个。我的解决方案正确吗? 参见维基百科上的非规范化