首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何命名表,如“供应商类别”

问如何命名表,如“供应商类别”
EN

Database Administration用户
提问于 2018-12-25 11:29:57
回答 1查看 842关注 0票数 0

我正在重构一个非常老的DB (< 2001),它从MyISAM迁移到InnoDB,我遇到了一些CamelCase表示法的问题。我不知道为什么,但由于使用了MySQL工作台,有时我的模式会用小写重命名。

无论如何,这个DB中的表名有时很奇怪,所以我想重命名它们。由于我使用的是Illuminate\Eloquent ORM,所以对表使用复数非常方便。

因此,我建议作出这样的改变:

代码语言:javascript
复制
+-------------------+--------------------------+
| Before            | After                    |
+-------------------+--------------------------+
| Retailer          | suppliers                |
| RetailerComment   | suppliers_comments       |
| Category2Retailer | suppliers_has_categories |
+-------------------+--------------------------+

问题是:

将包含对供应商的评论的表格命名为suppliers_comments (两个复数)是否正确(可接受)?我本可以简单地将该表命名为comments,但那样它就会干扰其他表。

我知道这个问题可能是基于主要观点的,但我更多地是在寻找最大的共识,将其作为思想的基础:

有什么客观的建议吗?我不是MySQL/DB专家。

EN

回答 1

Database Administration用户

发布于 2018-12-25 18:24:28

将包含对供应商的评论的表格命名为suppliers_comments (两个复数)是否正确(可接受)?我本可以简单地将表命名为注释,但那样它就会干扰其他表。

您可以这样做,但是在重命名任何表名之前,请在这里停止&在重命名一个表之前,请参阅MySQL博客文档这里,您应该彻底评估其影响。例如,您应该调查哪些应用程序正在使用表。如果表的名称发生变化,那么引用表名的应用程序代码也需要更改。此外,还必须手动调整引用表的其他数据库对象,如视图、存储过程、触发器、外键约束等。

MySQL重命名表示例

首先,我们创建一个名为hr的新数据库,该数据库由两个表组成:员工和部门。

创建人力资源数据库

代码语言:javascript
复制
CREATE DATABASE IF NOT EXISTS hr;

创建部门和雇员表

代码语言:javascript
复制
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)
);

其次,我们将样本数据插入到员工和部门表中:

代码语言:javascript
复制
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);

第三,我们检讨部门和雇员表的数据:

代码语言:javascript
复制
SELECT 
    department_id, dept_name
FROM
    departments;
代码语言:javascript
复制
SELECT 
    id, first_name, last_name, department_id
FROM
    employees;

重命名视图

引用的表

如果要重命名的表由视图引用,则如果重命名表,则视图将变得无效,并且必须手动调整视图。

例如,我们根据员工和部门表创建一个名为v_employee_info的视图,如下所示:

代码语言:javascript
复制
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视图中的所有数据。

代码语言:javascript
复制
SELECT 
    *
FROM
    v_employee_info;

现在,我们将员工重命名为people表,并再次从v_employee_info视图查询数据。

代码语言:javascript
复制
RENAME TABLE employees TO people;

SELECT 
    *
FROM
    v_employee_info;

MySQL返回以下错误消息:

错误代码: 1356。查看“hr.v_employee_info”引用无效表(S)或列(S)或函数(AC.26)或定义者/调用者缺乏使用它们的权限

我们可以使用CHECK语句检查v_employee_info视图的状态,如下所示:

代码语言:javascript
复制
CHECK TABLE v_employee_info;

我们需要手动更改v_employee_info视图,以便它引用人员表而不是employees表。

重命名存储过程

引用的表

如果要重命名的表被存储过程引用,则必须手动调整它,就像对视图所做的那样。

注意:这里我已经从mysqltutorial.org获取了所有代码和图片,以澄清表的重命名。

编辑了关于MySQL

命名约定的内容

  • 安装服务器时设置区分大小写。默认情况下,数据库对象的名称在UNIX上是区分大小写的,而在Windows上则不区分大小写。例如,在区分大小写的服务器上,名称CUSTOMER和Customer是不同的.
  • 数据库名称必须是唯一的。对于数据库中的每个用户,数据库对象的名称在所有用户中都必须是唯一的。例如,如果数据库包含用户A创建的部门表,则没有其他用户可以在同一数据库中创建部门表。
  • 名称不能是MySQL中的保留字,除非您将名称括在引号中。有关保留字的更多信息,请参阅看见 MySQL文档。

正如Mr. Max Vernon已经说过的,这里数据库名称完全取决于创建它们的人。话虽如此,使用某种理智的命名惯例是有意义的。

关于您的参考资料这里

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/225759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档