• 用户管理模块数据库设计


    --用户管理模块数据库设计
    
    drop database UsersDBTest
    --------------创建数据库----------------------------
    create database UsersDBTest  --sqlserver这一句话就可以创建数据库,其它默认值。
    
    on  primary  -- 默认就属于primary文件组,可省略
    (
    /*--数据文件的具体描述--*/
        name='UsersDBTest_data',  -- 主数据文件的逻辑名称
        filename='E:DBUsersDBTest_data.mdf', -- 主数据文件的物理名称和地址
        size=5mb, --主数据文件的初始大小
        maxsize=100mb, -- 主数据文件增长的最大值
        filegrowth=15%--主数据文件的增长率
    )
    log on
    (
    /*--日志文件的具体描述,各参数含义同上--*/
        name='UsersDBTest_log',
        filename='E:DBUsersDBTest_log.ldf',
        size=2mb,
        filegrowth=1mb
      )
      
      
      use  UsersDBTest -- 使用数据库
      
     -------------创建用户、角色、权限表------------------ 
      create table UserInfo
      (
    	  ID int identity(1,1) not null, 
    	  Uname nvarchar(max) not null,
    	  Pwd nvarchar(max) not null,
    	  ShowName nvarchar(max) null,
    
      );
        
      create table RoleInfo
      (
    	  ID int identity(1,1) not null,
    	  RoleName nvarchar(max) not null,
      );
    
    
      create table ActionInfo
      (
    	  ID int identity(1,1)  not null,
    	  ActionName nvarchar(max) not null
      );
      
      --------------创建关系表----------------
      
      create table UserInfoRoleInfo
      (
    	  UserInfo_ID int not null,
    	  RoleInfo_ID int not null
    	  
      );
      
      create table RoleInfoActionInfo
      (
    	  RoleInfo_ID int not null,
    	  ActionInfo_ID int not null
      );
      
      --如何让不拥有A角色的人拥有A角色的某个权限,让拥有A角色所有权限的人失去某个权限?
      --跨角色授权或削权
      create table R_UserInfo_ActionInfo  
      (
    	  ID int identity(1,1) not null,
    	  HasPermisson smallint not null,
    	  UserInfo_ID int not null,
    	  ActionInfo_ID int not null
      );
      
     ---------------创建所有主键约束-----------
     
     Alter table UserInfo
        add constraint PK_UserInfo  --给主键约束取别名,寓意:UserInfo表的主键约束。取别名的好处是1删除方便2为多个列定义同时约束,即主键组。
    		Primary Key Clustered(ID Asc); --主键约束 ,对ID列聚集索引,根据ID升序排序
    	
     Alter table RoleInfo
        add constraint PK_RoleInfo
    		Primary Key Clustered(ID Asc);
    	
     Alter table ActionInfo
        add constraint PK_ActionInfo 
    		Primary Key Clustered(ID Asc);
    	
     Alter table UserInfoRoleInfo
    	add constraint PK_UserInfoRoleInfo
    		Primary Key Clustered(UserInfo_ID,RoleInfo_ID Asc);
    	
     Alter table RoleInfoActionInfo
    	add constraint PK_RoleInfoActionInfo
    		Primary Key Clustered(RoleInfo_ID,ActionInfo_ID Asc);
    
    
     Alter table R_UserInfo_ActionInfo
    	add constraint PK_R_UserInfo_ActionInfo
    		Primary Key Clustered(ID Asc);
    		
    
    --主键的简单创建方式:
      --create table ActionInfo
      --(
    	 -- ID int identity(1,1) primary key not null,  --方式1
    	 -- ActionName nvarchar(max) not null,
    	 -- --primary key(ID)  --方式2
    
      --);
      
    --添加主键
     -- alter table UserInfo add constraint PK_UserInfo primary key(ID,Uname) --主键组
    --删除主键: 
    --Alter table UserInfo drop constraint PK_UserInfo 
    --必须先删除相关外键约束
    
    
    
    		
    ------------创建所有外键--------------------
    
     Alter table UserInfoRoleInfo
    	add constraint FK_UserInfoRoleInfo_UserInfo --给外键取别名
    		Foreign Key(UserInfo_ID) References UserInfo(ID) --让外键表UserInfoRoleInfo的 UserInfo_ID列引用UserInfo表的ID列 
    		On Delete no Action On Update no Action; --注意此处的Action不是ActionInfo表!!!
    		
    	
     Alter table UserInfoRoleInfo
    	add constraint FK_UserInfoRoleInfo_RoleInfo --注意名称不同
    		Foreign Key(RoleInfo_ID) References RoleInfo(ID) 
    		On Delete no Action On Update no Action;
    	
    	
     Alter table RoleInfoActionInfo
    	add constraint FK_RoleInfoActionInfo_RoleInfo 
    	Foreign Key(RoleInfo_ID) References RoleInfo(ID)
    	On Delete no Action On Update no Action;
    	
     Alter table RoleInfoActionInfo
    	add constraint FK_RoleInfoActionInfo_ActionInfo
    	Foreign Key(ActionInfo_ID) References ActionInfo(ID)
    	On Delete no Action On Update no Action;
    
    
    	
     Alter table R_UserInfo_ActionInfo
    	add constraint FK_UserInfoR_UserInfo_ActionInfo
    	Foreign Key(UserInfo_ID) References UserInfo(ID)
    	On Delete no Action On Update No Action;
    	
    
      
      Alter table R_UserInfo_ActionInfo
    	add constraint FK_ActionInfoR_UserInfo_ActionInfo
    	Foreign Key(ActionInfo_ID) References ActionInfo(ID)
    	On Delete no Action On Update No Action;
    	
    	 
    --ON DELETE NO ACTION 指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则产生错误并回滚 DELETE 语句。
    --ON UPDATE NO ACTION 指定如果试图更新某一行中的键值,而该行的键被其他表的现有行中的外键所引用,则产生错误并回滚 UPDATE 语句。 
    	
    --外键(引用)
    --作用:保持数据一致性,完整性,
    --主要目的:控制存储在外键表中的数据。 
    --使两张表形成关联,外键只能引用外表中的列的值或使用空值。
    --1如果不使用外键,成绩表的学号字段插入一个值(比如13341321),
    --但是这个值在学生表中并没有,此时数据库允许插入,并不会对插入的数据做关系检查。
    --问题是这样很可能出现学生表和成绩表不对应,在整合学生信息时出现遗漏或多余等问题。
    --2在设置外键的情况下,你要插入成绩表学号字段的值必须要求在学生表的学号字段能找到。 
    --你要删除学生表的某个学号,必须保证成绩表中没有引用该值所在的列(外键),否则就没法删除。
    --这就是所谓的保持数据的一致性和完整性。
    
    
    ------------创建索引------------------------	
    
    
     Create Index IX_FK_UserInfoRoleInfo_RoleInfo --给索引取名字
    	on UserInfoRoleInfo(RoleInfo_ID); --需要建立索引的列
    
     Create Index IX_FK_RoleInfoActionInfo_ActionInfo
    	on RoleInfoActionInfo(ActionInfo_ID);
    
    
     Create Index IX_FK_UserInfoR_UserInfo_ActionInfo
       on R_UserInfo_ActionInfo(UserInfo_ID);
    
    
     Create Index IX_FK_ActionInfoR_UserInfo_ActionInfo
    	on R_UserInfo_ActionInfo(ActionInfo_ID);
    	
    
    	 
    
    --外键是怎么发挥作用的?把两张表放一些数据增删改看看.
    
  • 相关阅读:
    预处理、const、static与sizeof-为什么不把所有的函数都定义成内联函数
    预处理、const、static、sizeof-说明内联函数使用的场合
    预处理、const、static、sizeof-为什么inline能很好地取代表达式形式的预定义
    预处理、const、static与sizeof-为什么要引入内联函数
    预处理、const、static与sizeof-#pragma pack的作用
    预处理、const、static与sizeof-sizeof与strlen有哪些区别
    预处理、const、static与sizeof-static全局变量与普通的全局变量有什么区别
    预处理、const、static与sizeof-static有什么作用(至少说出2个)
    预处理、const、static与sizeof-C++中const有什么作用(至少说出3个)
    预处理、const、static与sizeof-使用const与#define的特点及区别
  • 原文地址:https://www.cnblogs.com/hao-1234-1234/p/6340778.html
Copyright © 2020-2023  润新知