首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用行业标准样式编写SQL

如何用行业标准样式编写SQL
EN

Code Review用户
提问于 2018-10-03 17:59:58
回答 1查看 255关注 0票数 -5

下面是我运行的开始建立我需要的数据库的命令。

代码语言:javascript
复制
CREATE TABLE user ( id smallint unsigned not null auto_increment, constraint pk_user primary key (id) );

CREATE TABLE discord_user ( id varchar(20) not null, owner smallint unsigned, constraint pk_discord_user primary key (id), constraint fk_discord_user_owner foreign key (owner) references user(id) );

CREATE TABLE player ( uuid varchar(36) not null, owner smallint unsigned, constraint pk_player primary key (uuid), constraint fk_player_owner foreign key (owner) references user(id) );

CREATE TABLE kit (id mediumint unsigned not null auto_increment, designer smallint unsigned, name varchar(30) not null, disguise enum('ARMOR_STAND','ARROW','BAT','BLAZE','BOAT','CAVE_SPIDER','CHICKEN','COW','CREEPER','DONKEY','DROPPED_ITEM','EGG','ELDER_GUARDIAN','ENDER_CRYSTAL','ENDER_DRAGON','ENDER_PEARL','ENDER_SIGNAL','ENDERMAN','ENDERMITE','EXPERIENCE_ORB','FALLING_BLOCK','FIREBALL','FIREWORK','FISHING_HOOK','GHAST','GIANT','GUARDIAN','HORSE','IRON_GOLEM','ITEM_FRAME','LEASH_HITCH','MAGMA_CUBE','MINECART','MINECART_CHEST','MINECART_COMMAND','MINECART_FURNACE','MINECART_HOPPER','MINECART_MOB_SPAWNER','MINECART_TNT','MULE','MUSHROOM_COW','OCELOT','PAINTING','PIG','PIG_ZOMBIE','PLAYER','PRIMED_TNT','RABBIT','SHEEP','SILVERFISH','SKELETON','SKELETON_HORSE','SLIME','SMALL_FIREBALL','SNOWBALL','SNOWMAN','SPIDER','SPLASH_POTION','SQUID','THROWN_EXP_BOTTLE','UNDEAD_HORSE','VILLAGER','WITCH','WITHER','WITHER_SKELETON','WITHER_SKULL','WOLF','ZOMBIE','ZOMBIE_VILLAGER') not null, helmet enum('CHAINMAIL_HELMET','DIAMOND_HELMET','GOLD_HELMET','IRON_HELMET','LEATHER_HELMET'), chestplate enum('CHAINMAIL_CHESTPLATE','DIAMOND_CHESTPLATE','GOLD_CHESTPLATE','IRON_CHESTPLATE','LEATHER_CHESTPLATE'), leggings enum('CHAINMAIL_LEGGINGS','DIAMOND_LEGGINGS','GOLD_LEGGINGS','IRON_LEGGINGS','LEATHER_LEGGINGS'), boots enum('CHAINMAIL_BOOTS','DIAMOND_BOOTS','GOLD_BOOTS','IRON_BOOTS','LEATHER_BOOTS'), base_melee_damage tinyint unsigned not null, base_arrow_damage tinyint unsigned, base_knockback_taken_multiplier float(4,2) not null, base_melee_knockback_dealt_multiplier float(4,2) not null, constraint pk_kit primary key (id), constraint fk_kit_designer foreign key (designer) references user(id));

我希望将它们全部移动到一个文件中,并将它们作为SQL程序运行,以便在将来自动创建此数据库。

实际上,我不知道从风格上看,SQL应该是什么样子。

  1. 我该在哪里断线?
  2. 我的命名约定如何?
  3. 在SQL中如何使用注释?
  4. 我的数据类型看起来合适吗?还是有更好的方法来表示我想要的对象?
EN

回答 1

Code Review用户

发布于 2018-10-16 22:51:12

  1. 为了进行格式化,如果您不确定如何格式化您的SQL,我将下载以下工具可怜人的T格式化程序GitHub。当我不得不编辑其他开发人员的代码时,我会使用它。它对MySQL来说应该很好。

以下是我使用的设置

在一次单击中,它将将您的SQL格式设置为:

代码语言:javascript
复制
CREATE TABLE user (
    id SMALLINT unsigned NOT NULL auto_increment
    , CONSTRAINT pk_user PRIMARY KEY (id)
    );

CREATE TABLE discord_user (
    id VARCHAR(20) NOT NULL
    , OWNER SMALLINT unsigned
    , CONSTRAINT pk_discord_user PRIMARY KEY (id)
    , CONSTRAINT fk_discord_user_owner FOREIGN KEY (OWNER) REFERENCES user(id)
    );

CREATE TABLE player (
    uuid VARCHAR(36) NOT NULL
    , OWNER SMALLINT unsigned
    , CONSTRAINT pk_player PRIMARY KEY (uuid)
    , CONSTRAINT fk_player_owner FOREIGN KEY (OWNER) REFERENCES user(id)
    );

CREATE TABLE kit (
    id mediumint unsigned NOT NULL auto_increment
    , designer SMALLINT unsigned
    , name VARCHAR(30) NOT NULL
    , disguise enum('ARMOR_STAND', 'ARROW', 'BAT', 'BLAZE', 'BOAT', 'CAVE_SPIDER', 'CHICKEN', 'COW', 'CREEPER', 'DONKEY', 'DROPPED_ITEM', 'EGG', 'ELDER_GUARDIAN', 'ENDER_CRYSTAL', 'ENDER_DRAGON', 'ENDER_PEARL', 'ENDER_SIGNAL', 'ENDERMAN', 'ENDERMITE', 'EXPERIENCE_ORB', 'FALLING_BLOCK', 'FIREBALL', 'FIREWORK', 'FISHING_HOOK', 'GHAST', 'GIANT', 'GUARDIAN', 'HORSE', 'IRON_GOLEM', 'ITEM_FRAME', 'LEASH_HITCH', 'MAGMA_CUBE', 'MINECART', 'MINECART_CHEST', 'MINECART_COMMAND', 'MINECART_FURNACE', 'MINECART_HOPPER', 'MINECART_MOB_SPAWNER', 'MINECART_TNT', 'MULE', 'MUSHROOM_COW', 'OCELOT', 'PAINTING', 'PIG', 'PIG_ZOMBIE', 'PLAYER', 'PRIMED_TNT', 'RABBIT', 'SHEEP', 'SILVERFISH', 'SKELETON', 'SKELETON_HORSE', 'SLIME', 'SMALL_FIREBALL', 'SNOWBALL', 'SNOWMAN', 'SPIDER', 'SPLASH_POTION', 'SQUID', 'THROWN_EXP_BOTTLE', 'UNDEAD_HORSE', 'VILLAGER', 'WITCH', 'WITHER', 'WITHER_SKELETON', 'WITHER_SKULL', 'WOLF', 'ZOMBIE', 'ZOMBIE_VILLAGER') NOT NULL
    , helmet enum('CHAINMAIL_HELMET', 'DIAMOND_HELMET', 'GOLD_HELMET', 'IRON_HELMET', 'LEATHER_HELMET')
    , chestplate enum('CHAINMAIL_CHESTPLATE', 'DIAMOND_CHESTPLATE', 'GOLD_CHESTPLATE', 'IRON_CHESTPLATE', 'LEATHER_CHESTPLATE')
    , leggings enum('CHAINMAIL_LEGGINGS', 'DIAMOND_LEGGINGS', 'GOLD_LEGGINGS', 'IRON_LEGGINGS', 'LEATHER_LEGGINGS')
    , boots enum('CHAINMAIL_BOOTS', 'DIAMOND_BOOTS', 'GOLD_BOOTS', 'IRON_BOOTS', 'LEATHER_BOOTS')
    , base_melee_damage TINYINT unsigned NOT NULL
    , base_arrow_damage TINYINT unsigned
    , base_knockback_taken_multiplier FLOAT(4, 2) NOT NULL
    , base_melee_knockback_dealt_multiplier FLOAT(4, 2) NOT NULL
    , CONSTRAINT pk_kit PRIMARY KEY (id)
    , CONSTRAINT fk_kit_designer FOREIGN KEY (designer) REFERENCES user(id)
    );

  1. 命名约定应使用以下规则。参考文献
    • 确保名称是唯一的,并且不以保留字的形式存在。
    • 将长度保持在最多30字节--实际上,这是30个字符,除非您使用多字节字符集。
    • 名称必须以字母开头,不能以下划线结尾。
    • 仅在名称中使用字母、数字和下划线。
    • 避免使用多个连续下划线-这些可能很难读懂。
    • 使用下划线,在名称中自然包含一个空格(名变为first_name)。
    • 避免使用缩略语,如果必须使用它们,请确保它们被普遍理解。
    • 还可以查看清洁代码一书

  1. MySQL服务器支持三种注释样式:

您使用的命名约定应该足够清楚,以至于几乎没有必要进行注释。

  • 从“#”字符到行尾。
  • 从“--”序列到行尾。在MySQL中,“--”(双破折号)注释样式要求第二个破折号后面至少有一个空格或控制字符(例如空格、制表符、换行符等)。此语法与标准SQL注释语法略有不同,如1.8.5.6节中所讨论的“‘-’作为注释的开始”。
  • 从/*序列到下面的*/序列,如C编程语言所示。此语法允许注释扩展到多行,因为开始序列和结束序列不需要在同一行上。

  1. 为列参考文献 选择正确的类型
    • 为了获得最佳存储,您应该尝试在所有情况下使用最精确的类型。例如,如果整数列用于范围为1至99999的值,则MEDIUMINT无符号是最佳类型。在表示所有所需值的类型中,此类型使用最少的存储量。
    • 所有具有十进制列的基本计算(+、-、*和/)都以65小数位(基数10)的精度完成。
    • 如果精度不是太重要,或者速度是最高优先,双类型可能是足够好的。为了获得高精度,您可以始终转换为存储在BIGINT中的定点类型.这使您能够使用64位整数进行所有计算,然后根据需要将结果转换为浮点值。
票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/204870

复制
相关文章

相似问题

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