加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

何时行使自动增量键?

发布时间:2021-02-25 17:56:21 所属栏目:编程 来源:网络整理
导读:我最近开始研究MySQL,固然我已经阅读了一些有关数据库布局的文档,可是我无法领略自动增量键以及为什么要行使它们. 有人汇报我: 最好行使数字取代文本作为主键, 最好行使没有任何营业寄义的密钥 让我们看一下下面的环境: tStores tSales tCustomers--------

我最近开始研究MySQL,固然我已经阅读了一些有关数据库布局的文档,可是我无法领略自动增量键以及为什么要行使它们.

有人汇报我:

>最好行使数字取代文本作为主键,
>最好行使没有任何营业寄义的密钥

让我们看一下下面的环境:

 tStores        tSales         tCustomers
----------    -----------    --------------
store_id       sale_id        customer_id
storeCode      store_id
               customer_id

起首,我将一些数据加载到tStore中,以便全部可以贩卖产物的市肆.在我们的营业中,全部市肆都有4个字母的代码来标识它们.我可以将其用作主键,可是基于上述提议,我应该行使自动递增的store_id字段?

题目是,每次我在tSales中插入内容时,我都必需回到tStores并执行以下操纵:

SELECT store_id from tStores WHERE storeCode = @myStoreCode;

假设我正在每个市肆的tSales中加载成千上万的行,将storeCode用作主键会不会更有用?
办理这个题目的最有用要领是什么? 最佳谜底 是的,您可以将storeCode用作主键,假如可以确保它是独一的,它将可以行使.然后,您将在其他表上添加外键以成立相关.

自动增量索引的甜头是:

>凡是比其他列范例上的任何索引都要快
>凡是由某些框架(譬喻PHP中的Laravel)保举

与您的布局有关,我将对以下几点举办评述:

>您有殽杂的套管柱/表.在MySQL上事变时,尤其是在差异的OS(Windows / Linux)上行使时,我老是提议对模式,表和列都行使小写名称.
>您在store_id和store_code前面添加了前缀.此前缀不是必须的.为什么不简朴地定名列ID和代码.
>应该将tSales上的相关定名为tStores_id,以便清晰地指出您是从哪个表和哪个列中引用的.

下面是此示例的SQL代码:

CREATE SCHEMA `myshop` ;

CREATE TABLE `store`.`stores` (
  `code` VARCHAR(10) NOT NULL,PRIMARY KEY (`code`));

CREATE TABLE `store`.`sales` (
  `id` INT NOT NULL AUTO_INCREMENT,`store_code` VARCHAR(10) NOT NULL,`customer_id` INT NOT NULL,PRIMARY KEY (`id`));

CREATE TABLE `store`.`customers` (
  `id` INT NOT NULL AUTO_INCREMENT,PRIMARY KEY (`id`));

ALTER TABLE `store`.`sales` 
ADD INDEX `fk_sales_customers_id_idx` (`customer_id` ASC) VISIBLE;

ALTER TABLE `store`.`sales` 
ADD CONSTRAINT `fk_sales_customers_id`
  FOREIGN KEY (`customer_id`)
  REFERENCES `store`.`customers` (`id`)
  ON DELETE CASCADE
  ON UPDATE CASCADE;

ALTER TABLE `store`.`sales` 
ADD INDEX `fk_sales_stores_code_idx` (`store_code` ASC) VISIBLE;

ALTER TABLE `store`.`sales` 
ADD CONSTRAINT `fk_sales_stores_code_id`
  FOREIGN KEY (`store_code`)
  REFERENCES `store`.`stores` (`code`)
  ON DELETE CASCADE
  ON UPDATE CASCADE;

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读