mysql数据库表设计(数据库表结构设计,常见的数据库管理系统)
大家好,关于mysql数据库表设计很多朋友都还不太明白,今天小编就来为大家分享关于数据库表结构设计,常见的数据库管理系统的知识,希望对各位有所帮助!
怎样建立数据库表格
如何在excel中创建“数据库”
excel是一个自由表,一个EXCEL的工作薄就是一个数据库,它里面的每一张表就是数据库的表,你可象操作表一样对其进行查询等操作,它里面的列就是数据库的字段,行就是记录,因此你可以按数据库的架构来组建数据,只是你如果你组建的数据不符合数据库的规则,在查询时不能得到时相应的结果。因此在EXCEL中不存在创建数据库。但对存在的数据可以引用。当满足条件A、B、C、D……时引用是可以的,但如果是在EXCEL中直接引用是不行的,一种是用VBA利用ADO访问EXCEL,在查询时把A、B、C、D几个条件按SQL语法写进查询语句中,引用返回的记录集,一种是利用函数把满足A、B、C、D的记录筛选出来,然后再引用。
怎么在SQL数据库中新建表。
可以有两种办法啦:
1.在企业管理器里面建:这种方法很简单点击选中的数据库右键新建即可相信你应该会不多说了。
2.在查询分析器里建:基本思路要建表,表是要在库里建的所以你要先引用你要使用的数据库加进来再开始建表,以下为一个简单实例;
create database student--创建一个student数据库由于这里主要说建表所以建一个简单的数据库
use student--引用数据库student
create table Test(--创建一个Test表
name varchar(20) primary key indentity(1,1),--列名(字段名)数据类型在此加主键约束就不用加非空约束再加上自动增长列(含义从1开始增长增长量是1)
password varchar(10) not null--注意建表最后一个字段名时结尾不要加逗号否则会出错
)
sqlserver下怎么建立数据库怎么建表
方法/步骤
1
首先我们打开SQL SERVER自带的数据库管理工具,从开始菜单中可以找到,如图点击进去;
2
开始连接SQL SERVER服务器,就是我们装好的SQL SERVER服务器;
3
右击数据库,选择第一个,新建一个数据库;
4
填写数据库的名称,下面是设置自动增长的,一般不用管,默认
5
点击确定后就可以生成一个数据库,此时里面是没有表的;
6
右击表新建一个表,填写你要的字段名称
7
填完字段名称后点击字段名称那个内部窗口的小叉叉,然后就提示你输入表名了,填写下表名,一个数据库的建立过程就是这样的;
或者
create database stuDB
on primary--默认就属于primary文件组,可省略
(
/*--数据文件的具体描述--*/
name='stuDB_data',--主数据文件的逻辑名称
filename='D:\stuDB_data.mdf',--主数据文件的物理名称
size=5mb,--主数据文件的初始大小
maxsize=100mb,--主数据文件增长的最大值
filegrowth=15%--主数据文件的增长率
)
log on
(
/*--日志文件的具体描述,各参数含义同上--*/
name='stuDB_log',
filename='D:\stuDB_log.ldf',
size=2mb,
filegrowth=1mb
)
怎样建立一个简单数据库?
把excel导入数据库,不出现表格嵌套可以使用下面这个方法导入;
思路:
(1)、把excel数据读入到dataset中;
(2)、建立相应结构的数据表格
(3)、把dat畅set中的数据更新到数据表中
如何在数据库中建立表
Create table表名字
(表栏名1数据类型,
表栏名2数据类型,
表栏名3数据类型,
表栏名4数据类型);
例如:
Create table上课表
(学生 Varchar(10),
学号 Number(10));
如何建立一个新的ACCESS表格
新建一个数据库有两种方法:一种是创建一个空数据库,即建立一个没有表、查询、窗体和报表等内容的数据库;另一种方法是使用Access中提供的数据库模板创建数据库,即通过对向导所提出的选项和不同选择来设计窗体、查询和报表等,从而建立一个完整的数据库。这里我们将使用第一种方法:
Step1:在Access窗口中单击“文件(F)”菜单,在下拉菜单中选择“新建”项,将得到对话框。
“新建”对话框
双击“数据库”图标,即会显示“文件新建数据库”对话框,
Step3:在文件名文本框中输入要保存数据库的文件夹及新建的数据库名,如“C:\test”,然后选择“确定”。即可创建好一个名为“test”的数据库。
二.添加数据表
表是Access数据库的基础,是信息的载体。其它对象如查询、窗体和报表,也是将表中的信息以各种形式表现出来,方便用户使用这些信息。在Access中,创建表的方法有三种:一是使用设计器创建表;二是通过输入数据创建表;三是利用向导创建表。在这里,我们采用第一种方法创建表:
Step4:在窗体中,双击“使用设计器创建表”,则会出现对话框。
表设计器对话框
Step5:在“字段名称”列的第一行中输入authors表的第一个字段的名字 id。然后按回车键,此时在“数据类型”列中会显示出一个按钮,单击按钮,在弹出的下拉列表中选择“文本”选项,设置 id字段的类型为文本型。
设置字段数据类型
Step6:在“字段属性饥域的“常规”选项卡中,可以设置字段的大小、格式和规则等。如我们可以把id字段的长度大小设置为12,并且规定其不能为空,因此,可以设置如下:在“字段大小”文本框中输入12,在“必填字段”文本框中输入“是”,在“允许空字符串”文本框中输入“否”。
设置字段属性内容
Step7:重复上述方法,添加其它字段,并设置其属性。
Step8:设置完成后,单击“文件(F)”菜单,在下拉菜单中选择“保存”项,将会出现一个如图1.8的对话框,在“表名称”文本框中输入表名 authors,单击确定按钮。
“保存”对话框
Step9:此时,系统会提示用户建立一关键字段。一般情况下单击“是”完成即可。
如何用mysql创建创建博客数据库表
1.创建一个数据库为test_db
mysql> create database test_db;
Query OK, 1 row affected(0.00 sec)
切换到test_db上
mysql> use test_db;
Database changed
mysql>
2.创建一个表tb_emp1
create table tb_emp1
(
id INT(11),
name VARCHAR(25),
deptid INT(11),
salary FLOAT
);
mysql> create table tb_emp1
->(
-> id INT(11),
-> name VARCHAR(25),
-> deptid INT(11),
-> salary FLOAT
->);
Query OK, 0 rows affected(0.09 sec)
MYsql数据库怎样创建表? 20分
CREATE DATABASE cookbook;创建一个叫“cookbook”的数据库
USE cookbook;使用cookbook这个数据库
CREATE TABLE limbs(thing VARCHAR(抚0),legs INT,arms INT);创建表“limbs”其中包括thing,legs,aems字段
创建表的命令是 CREATE TABLE表名称
后面括号里的内容是表中字段的属性
如何 SQL创建表
商品表
create table product
(
proid varchar(20) primary key,
proname varchar(50),
proprice money,
procount int
);
顾客表
create table customer
(
custno varchar(20) primary key,
custname varchar(50),
custsex varchar(10),
custage int,
custtel varchar(20)
);
订单表
create table orderitem
(
custno varchar(20),
proid varchar(20),
ocount int,
oprice money,
odate date
);
外键
alter table orderitem add constraint fk_custno foreign key(custno) references customer(custno);
alter table orderitem add constraint fk_proid foreign key(proid) references product(proid);
SQL数据库怎么创建表.
CREATE TABLE [dbo].[student]( [学号] [CHAR](8) NOT NULL, [姓名] [CHAR](8) NULL, [性别] [CHAR](2) NULL, [年龄] [INT] NULL, [联系方式] [CHAR](11) NULL, [所在院系] [CHAR](20) NULL, CONSTRAINT [PK_student] PRIMARY KEY CLUSTERED( [学号] ASC)WITH(PAD_INDEX= OFF, STATISTICS_NOREPUTE= OFF, IGNORE_DUP_KEY= OFF, ALLOW_ROW_LOCKS= ON, ALLOW_PAGE_LOCKS= ON) ON [PRIMARY]) ON [PRIMARY]GOSET ANSI_PADDING OFFGOALTER TABLE [dbo].[student] WITH CHECK ADD CONSTRAINT [CK_student] CHECK(([性别]='女' OR [性别]='男'))GOALTER TABLE [dbo].[student] CHECK CONSTRAINT [CK_student]GOALTER TABLE [dbo].[student] WITH CHECK ADD CONSTRAINT [CK_student_1] CHECK(([联系方式] LIKE'[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'))GOALTER TABLE [dbo].[student] CHECK CONSTRAINT [CK_student_1]GOALTER TABLE [dbo].[student] ADD CONSTRAINT [DF_student_所在院系] DEFAULT('电信系') FOR [所在院系]GO
MySQL数据库表设计,需要建几个表,包括哪些字段
简单点:用户表(用户ID,姓名,密码,性别,年龄,职业,微信,邮箱,手机,专长,用户状态,登录时间,是否管理员)其中也可以单独设置一个管理员表
试题类别:(类别 ID,类别名称,类别描述)
试题表:(试题 ID,试题类别 ID,试题描述,试题难度,试题答案)
答题表:(答题 ID,用户 ID,试题 ID,答题答案,答题评分)
大概就这样
数据库表结构设计,常见的数据库管理系统
一、数据场景 1、表结构简介任何工具类的东西都是为了解决某个场景下的问题,比如Redis缓存系统热点数据,ClickHouse解决海量数据的实时分析,MySQL关系型数据库存储结构化数据。数据的存储则需要设计对应的表结构,清楚的表结构,有助于快速开发业务,和理解系统。表结构的设计通常从下面几个方面考虑:业务场景、设计规范、表结构、字段属性、数据管理。
2、用户场景
例如存储用户基础信息数据,通常都会下面几个相关表结构:用户信息表、单点登录表、状态管理表、支付账户表等。
用户信息表
存储用户三要素相关信息:姓名,手机号,身份证,登录密码,邮箱等。
CREATE TABLE `ms_user_center`( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT'用户ID', `user_name` varchar(20) NOT NULL COMMENT'用户名', `real_name` varchar(20) DEFAULT NULL COMMENT'真实姓名', `pass_word` varchar(32) NOT NULL COMMENT'密码', `phone` varchar(20) NOT NULL COMMENT'手机号', `email` varchar(32) DEFAULT NULL COMMENT'邮箱', `head_url` varchar(100) DEFAULT NULL COMMENT'用户头像URL', `card_id` varchar(32) DEFAULT NULL COMMENT'身份证号', `user_sex` int(1) DEFAULT'1' COMMENT'用户性别:0-女,1-男', `create_time` datetime DEFAULT NULL COMMENT'创建时间', `update_time` datetime DEFAULT NULL COMMENT'更新时间', `state` int(1) DEFAULT'1' COMMENT'是否可用,0-不可用,1-可用', PRIMARY KEY(`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';单点登录表
用意是在多个业务系统中,用户登录一次就可以访问所有相互信任的业务子系统,是聚合业务平台常用的解决方案。
CREATE TABLE `ms_user_sso`( `user_id` int(11) NOT NULL COMMENT'用户ID', `sso_id` varchar(32) NOT NULL COMMENT'单点信息编号ID', `sso_code` varchar(32) NOT NULL COMMENT'单点登录码,唯一核心标识', `log_ip` varchar(32) DEFAULT NULL COMMENT'登录IP地址', `create_time` datetime DEFAULT NULL COMMENT'创建时间', `update_time` datetime DEFAULT NULL COMMENT'更新时间', `state` int(1) DEFAULT'1' COMMENT'是否可用,0-不可用,1-可用', PRIMARY KEY(`user_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户单点登录表';状态管理表
系统用户在使用时候可能出现多个状态,例如账户冻结、密码锁定等,把状态聚合到一起,可以更加方便的管理和验证。
CREATE TABLE `ms_user_status`( `user_id` int(11) NOT NULL COMMENT'用户ID', `account_status` int(1) DEFAULT'1' COMMENT'账户状态:0-冻结,1-未冻结', `real_name_status` int(1) DEFAULT'0' COMMENT'实名认证状态:0-未实名,1-已实名', `pay_pass_status` int(1) DEFAULT'0' COMMENT'支付密码是否设置:0-未设置,1-设置', `wallet_pass_status` int(1) DEFAULT'0' COMMENT'钱包密码是否设置:0-未设置,1-设置', `wallet_status` int(1) DEFAULT'1' COMMENT'钱包是否冻结:0-冻结,1-未冻结', `email_status` int(1) DEFAULT'0' COMMENT'邮箱状态:0-未激活,1-激活', `message_status` int(1) DEFAULT'1' COMMENT'短信提醒开启:0-未开启,1-开启', `letter_status` int(1) DEFAULT'1' COMMENT'站内信提醒开启:0-未开启,1-开启', `emailmsg_status` int(1) DEFAULT'0' COMMENT'邮件提醒开启:0-未开启,1-开启', `create_time` datetime DEFAULT NULL COMMENT'创建时间', `update_time` datetime DEFAULT NULL COMMENT'更新时间', `state` int(1) DEFAULT'1' COMMENT'是否可用,0-不可用,1-可用', PRIMARY KEY(`user_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户状态表';支付账户表
用户交易的核心表,存储用户相关的账户资金信息。
CREATE TABLE `ms_user_wallet`( `wallet_id` int(11) NOT NULL AUTO_INCREMENT COMMENT'钱包ID', `user_id` int(11) NOT NULL COMMENT'用户ID', `wallet_pwd` varchar(32) DEFAULT NULL COMMENT'钱包密码', `total_account` decimal(20,2) DEFAULT'0.00' COMMENT'账户总额', `usable_money` decimal(20,2) DEFAULT'0.00' COMMENT'可用余额', `freeze_money` decimal(20,2) DEFAULT'0.00' COMMENT'冻结金额', `freeze_time` datetime DEFAULT NULL COMMENT'冻结时间', `thaw_time` datetime DEFAULT NULL COMMENT'解冻时间', `create_time` datetime DEFAULT NULL COMMENT'创建时间', `update_time` datetime DEFAULT NULL COMMENT'更新时间', `state` int(1) DEFAULT'1' COMMENT'是否可用,0-不可用,1-可用', PRIMARY KEY(`wallet_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户钱包';二、设计规范 1、涉及模块
通过上面几个表设计的案例,可以看到表设计关联到数据库的各个方面知识:数据类型,索引,编码,存储引擎等。表设计是一个很大的命题,不过也遵循一个基本规范:三范式。
2、三范式基础概念
一范式
表的列的具有原子性,不可再分解,即列的信息,不能分解,关系型数据库MySQL、Oracle等自动的满足。
二范式
每个事实的数据记录只会出现一次,不会冗余,通常设计一个主键来实现。
三范式
要求一个表中不包含已经存在于其它表的非主键信息,例如部门和员工的信息,员工表包含部门表的主键ID,则可以关联获取相关信息,没必要在员工表保存相关信息。
优缺点对比
范式化设计
范式化结构设计通常更新快,因为冗余数据较少,表结构轻巧,也更好的写入内存中。但是查询起来涉及到关联,代价非常高,非常损耗查询性能。
反范式化设计
所有的数据都在一张表中,避免关联查询,索引的有效性更高,但是数据的冗余性极高。
建议结论
上述的两种设计方式在实际开发中都是不存在的,在实际开发中都是混合使用。比如汇总统计,缓存数据,都会基于反范式化的设计。
三、字段属性
合适的字段类型对于高性能来说非常重要,基本原则如下:简单的类型占用资源更少;在可以正确存储数据的情况下,选最小的数据类型。
1、数据类型选择整数类型
TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,根据数据类型范围合理选择即可。
实数类型
FLOAT、DOUBLE、DECIMAL,建议资金货币相关类型使用高精度DECIMAL存储,或者把数据成倍扩大为整数,采用BIGINT存储,不过处理相对麻烦。
字符类型
CHAR、VARCHAR,长度不确定建议采用VARCHAR存储,不过VARCHAR类型需要额外开销记录字符串长度。CHAR适合存储短字符,或者定长字符串,例如MD5的加密结构。
时间类型
DATETIME、TIMESTAMP,DATETIME保存大范围的值,精度秒。TIMESTAMP以时间戳的格式,范围相对较小,效率也相对较高,所以通常情况建议使用。
MySQL的字段类型有很多种,可以根据数据特性选择合适的,这里只描述常见的几种类型。
2、基础用法操作数据类型
修改字段类型
ALTER TABLE ms_user_sso MODIFY state CHAR(1) DEFAULT'0'; ALTER TABLE ms_user_sso MODIFY state INT(1) DEFAULT'1' COMMENT'状态:0不可用,1可用';
修改名称位置
ALTER TABLE ms_user_sso CHANGE log_ip login_ip VARCHAR(32) AFTER update_time;索引使用
索引类型:主键索引,普通索引,唯一索引,组合索引,全文索引。这里演示普通索引的操作。MySQL的核心模块,后续详说。
添加索引
ALTER TABLE ms_user_wallet ADD INDEX user_id_index(user_id); CREATE INDEX state_index ON ms_user_wallet(state);
查看索引
SHOW INDEX FROM ms_user_wallet;
删除索引
DROP INDEX state_index ON ms_user_wallet;
修改索引
不具有真正意义上的修改,可以把原有的索引删除之后,再次添加索引。
外键关联
用处:外键关联的作用保证多个数据表的数据一致性和完整性,建表时先有主表,后有从表;删除数据表,需要先删从表,再删主表。复杂场景不建议使用,实际开发中用的也不多。
添加外键
ALTER TABLE ms_user_wallet ADD CONSTRAINT user_id_out_key FOREIGN KEY(user_id) REFERENCES ms_user_center(id);
删除外键
ALTER TABLE ms_user_wallet DROP FOREIGN KEY user_id_out_key;四、表结构管理 1、查看结构 DESC ms_user_status; SHOW CREATE TABLE ms_user_status; 2、字段结构添加字段 ALTER TABLE ms_user_status ADD `delete_time` datetime DEFAULT NULL COMMENT'删除时间';删除字段 ALTER TABLE ms_user_status DROP COLUMN delete_time; 3、修改表名 ALTER TABLE ms_user_center RENAME ms_user_info; 4、存储引擎存储引擎 SELECT VERSION(); SHOW ENGINES;
MySQL 5.6支持的存储引擎有InnoDB、MyISAM、Memory、Archive、CSV、BLACKHOLE等。一般默认使用InnoDB,支持事务管理。该模块MySQL核心,后续详解。
修改引擎
数据量大的场景下,存储引擎修改是一个难度极大的操作,容易会导致表的特性变动,引起各种后续反应,后续会详说。
ALTER TABLE ms_user_sso ENGINE= MyISAM; 5、修改编码
表字符集默认使用utf8,通用,无乱码风险,汉字3字节,英文1字节,utf8mb4是utf8的超集,有存储4字节例如表情符号时使用。
查看编码 SHOW VARIABLES LIKE'character%';修改编码 ALTER TABLE ms_user_sso DEFAULT CHARACTER SET utf8mb4;五、数据管理 1、增删改查
添加数据
INSERT INTO ms_user_sso( user_id,sso_id,sso_code,create_time,update_time,login_ip,state) VALUES('1','SSO7637267','SSO78631273612','2019-12-24 11:56:57','2019-12-24 11:57:01','127.0.0.1','1');
更新数据
UPDATE ms_user_sso SET user_id='1',sso_id='SSO20191224',sso_code='SSO20191224', create_time='2019-11-24 11:56:57',update_time='2019-11-24 11:57:01', login_ip='127.0.0.1',state='1' WHERE user_id='1';
查询数据
一般情况下都是禁止使用 select*操作。
SELECT user_id,sso_id,sso_code,create_time,update_time,login_ip,state FROM ms_user_sso WHERE user_id='1';
删除数据
DELETE FROM ms_user_sso WHERE user_id='2';
不带where条件,就是删除全部数据。原则上不允许该操作,优化篇会详解。TRUNCATE TABLE也是清空表数据,但是占用的资源相对较少。
2、数据安全不可逆加密
这类加密算法,多用来做数据验证操作,比如常见的密码验证。
SELECT MD5('cicada')='94454b1241ad2cfbd0c44efda1b6b6ba'; SELECT SHA('cicada')='0501746a2e4fd34e1d14015fc4d58309585edc7d'; SELECT PASSWORD('smile')='*B4FB95D86DCFC3F33A3852714DC742C77504479D';可逆加密
安全性要求高的系统,需要做三级等保,对数据的安全性极高,数据在存储时必须加密入库,取出时候需要解密,这些就需要可逆加密。
SELECT DECODE(ENCODE('123456','key_salt'),'key_salt'); SELECT AES_DECRYPT(AES_ENCRYPT('cicada','salt123'),'salt123');
上述数据安全的管理,也可以基于应用系统的服务(代码)层进行处理,相对专业的流程是从数据生成源头处理,规避数据传递过程泄露,造成不必要的风险。
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!