我最近开始研究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;
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|