我是数据库管理的相对新手。我正在 MySQL 的本地主机上设置我的第一个数据库,并想了解最佳实践。这是我目前的工作流程:
# do_everything.sql
SELECT 'CREATING DATABASE STRUCTURE' info;
DROP DATABASE IF EXISTS my_first_db;
CREATE DATABASE IF NOT EXISTS my_first_db;
USE my_first_db;
SET default_storage_engine = innodb;
SELECT CONCAT('storage engine: ', @@default_storage_engine) info;
SELECT 'CREATING TABLE A' info;
-- Code to create table from source_data_A.csv
SELECT 'CREATING LOGGER FOR TABLE A' info;
-- Code to create log table for table A
-- Code to create insert, update, & delete triggers for table A
SELECT 'LOADING SOURCE DATA A' info;
-- Code to load source_data_A.csv into table A
SELECT 'CREATING TABLE B' info;
-- Code to create table from source_data_B.csv
SELECT 'CREATING LOGGER FOR TABLE B' info;
-- Code to create log table for table B
-- Code to create insert, update, & delete triggers for table B
SELECT 'LOADING SOURCE DATA B' info;
-- Code to load source_data_B.csv into table B
SELECT 'DATABASE CREATION COMPLETE' info;
然后从我的终端运行:
mysql --local-infile=1 -uroot -p < /absolute/path/to/do_everything.sql
我应该根据逻辑块
do_everything.sql
分成不同的文件吗?.sql
如果是这样,那么我是否会有一个主 shell 脚本来执行所有这些脚本?如果我保持相同的工作流程,我是否遵循最佳实践?
Should I be splitting up do_everything.sql into different .sql files according to logical chunks? If so, would I then have a single master shell script that executes all of them?
恕我直言,是的,您应该将
do_everything.sql
脚本拆分成更小的逻辑块——模块化是我们软件工程师可以用来帮助组织工作的关键工具之一,这将减少错误和错误。您可以逐个模块测试,而不必总是与庞然大物打交道(或印度次大陆的人可能会说的“主宰”!:-))。If I keep the same workflow, am I following best practices?
请参阅我上面关于模块化的评论 - 我相信将脚本分解为逻辑部分会被认为是最佳实践 - 我以前总是逐个表格进行 - 这样很容易看到出现任何问题的地方,并且“子脚本”可以一一测试,也可以检查主脚本。
你在评论中问:
Can I modularize the scripts and run them from a single "master" .sql file? If so, having trouble looking up the command to do so.
这非常简单——您只需在脚本中使用
SOURCE
关键字 (ieSOURCE /path/to/file.sql
)——您可以将其嵌套到多个级别(但不要太多)。我通常做的是有一个 master_script.sql 它实际上只是一个“骨架”——它只是充满了
SOURCE
调用其他脚本的语句。其中一些可能自己有SOURCE
陈述(在合理范围内)。我发现这非常有效。