mysql数据库:索引Index/视图view/DBA常见操作/数据库设计三范式(老杜)
数据库索引(Index):
创建索引:
CREATE INDEX index_name ON table_name(column_name);
删除索引:
DROP INDEX index_name ON table_name;
查看索引:
SHOW INDEX FROM table_name;
数据库视图(View):
创建视图:
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
删除视图:
DROP VIEW view_name;
查看视图:
DESCRIBE view_name;
或者
SHOW CREATE VIEW view_name;
数据库管理员(DBA):
授权:
GRANT ALL ON database_name.* TO 'username'@'host';
撤销权限:
REVOKE privilege ON database_name.* FROM 'username'@'host';
数据库设计三范式(1NF, 2NF, 3NF):
第一范式(1NF):每个列都是不可分割的原子数据项。
第二范式(2NF):在1NF的基础上,非主键列完全依赖于主键,不能只依赖于主键的一部分。
第三范式(3NF):在2NF的基础上,非主键列之间不存在传递依赖。即每个列都依赖于主键,而不是依赖于其他非主键列。
例如,设计一个符合第三范式的数据库表:
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
CustomerID int NOT NULL,
OrderDate datetime NOT NULL,
PRIMARY KEY (OrderID),
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
在这个例子中,OrderNumber
依赖于OrderID
,而不是直接依赖于主键,它是冗余数据,不符合第三范式。我们可以进一步拆分为如下两个表来满足第三范式:
CREATE TABLE OrderDetails (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
OrderDate datetime NOT NULL,
PRIMARY KEY (OrderID),
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID)
);
CREATE TABLE Customers (
CustomerID int NOT NULL,
...
PRIMARY KEY (CustomerID)
);
在这个重新设计的表结构中,OrderDetails
表中的OrderNumber
只依赖于OrderID
,不依赖于其他非主键列,满足第三范式的要求。
评论已关闭