我正在重构一个非常老的DB (< 2001),它从MyISAM迁移到InnoDB,我遇到了一些CamelCase表示法的问题。我不知道为什么,但由于使用了MySQL工作台,有时我的模式会用小写重命名。
无论如何,这个DB中的表名有时很奇怪,所以我想重命名它们。由于我使用的是Illuminate\Eloquent ORM,所以对表使用复数非常方便。
因此,我建议作出这样的改变:
+-------------------+--------------------------+
| Before | After |
+-------------------+--------------------------+
| Retailer | suppliers |
| RetailerComment | suppliers_comments |
| Category2Retailer | suppliers_has_categories |
+-------------------+--------------------------+问题是:
将包含对供应商的评论的表格命名为suppliers_comments (两个复数)是否正确(可接受)?我本可以简单地将该表命名为comments,但那样它就会干扰其他表。
我知道这个问题可能是基于主要观点的,但我更多地是在寻找最大的共识,将其作为思想的基础:
有什么客观的建议吗?我不是MySQL/DB专家。
发布于 2018-12-25 18:24:28
将包含对供应商的评论的表格命名为suppliers_comments (两个复数)是否正确(可接受)?我本可以简单地将表命名为注释,但那样它就会干扰其他表。
您可以这样做,但是在重命名任何表名之前,请在这里停止&在重命名一个表之前,请参阅MySQL博客文档这里,您应该彻底评估其影响。例如,您应该调查哪些应用程序正在使用表。如果表的名称发生变化,那么引用表名的应用程序代码也需要更改。此外,还必须手动调整引用表的其他数据库对象,如视图、存储过程、触发器、外键约束等。
首先,我们创建一个名为hr的新数据库,该数据库由两个表组成:员工和部门。
创建人力资源数据库
CREATE DATABASE IF NOT EXISTS hr;创建部门和雇员表
CREATE TABLE departments (
department_id INT AUTO_INCREMENT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
id int AUTO_INCREMENT primary key,
first_name varchar(50) not null,
last_name varchar(50) not null,
department_id int not null,
FOREIGN KEY (department_id)
REFERENCES departments (department_id)
);
其次,我们将样本数据插入到员工和部门表中:
INSERT INTO departments(dept_name)
VALUES('Sales'),('Markting'),('Finance'),('Accounting'),('Warehouses'),('Production');
INSERT INTO employees(first_name,last_name,department_id)
VALUES('John','Doe',1),
('Bush','Lily',2),
('David','Dave',3),
('Mary','Jane',4),
('Jonatha','Josh',5),
('Mateo','More',1);第三,我们检讨部门和雇员表的数据:
SELECT
department_id, dept_name
FROM
departments;
SELECT
id, first_name, last_name, department_id
FROM
employees;
引用的表
如果要重命名的表由视图引用,则如果重命名表,则视图将变得无效,并且必须手动调整视图。
例如,我们根据员工和部门表创建一个名为v_employee_info的视图,如下所示:
CREATE VIEW v_employee_info as
SELECT
id, first_name, last_name, dept_name
from
employees
inner join
departments USING (department_id);视图使用“内部联接”子句连接部门和员工表。
下面的SELECT语句返回v_employee_info视图中的所有数据。
SELECT
*
FROM
v_employee_info;
现在,我们将员工重命名为people表,并再次从v_employee_info视图查询数据。
RENAME TABLE employees TO people;
SELECT
*
FROM
v_employee_info;MySQL返回以下错误消息:
错误代码: 1356。查看“hr.v_employee_info”引用无效表(S)或列(S)或函数(AC.26)或定义者/调用者缺乏使用它们的权限
我们可以使用CHECK语句检查v_employee_info视图的状态,如下所示:
CHECK TABLE v_employee_info;
我们需要手动更改v_employee_info视图,以便它引用人员表而不是employees表。
引用的表
如果要重命名的表被存储过程引用,则必须手动调整它,就像对视图所做的那样。
注意:这里我已经从mysqltutorial.org获取了所有代码和图片,以澄清表的重命名。
命名约定的内容
正如Mr. Max Vernon已经说过的,这里数据库名称完全取决于创建它们的人。话虽如此,使用某种理智的命名惯例是有意义的。
关于您的参考资料这里
https://dba.stackexchange.com/questions/225759
复制相似问题