--创建表空间
CREATE TABLESPACE tablespace_bank
DATAFILE 'e:\bank\bank.dbf' SIZE 10M AUTOEXTEND ON ;
--创建用户
create user userBank identified by userBank default tablespace tablespace_bank;
--用户授权
grant connect,resource to userBank;
drop table tradeInfo;
drop table userInfo;
drop table cardInfo;
drop table Deposit;
CREATE TABLE userInfo --用户信息表
(
customerID number NOT NULL,
customerName varCHAR2(8) NOT NULL,
PID varCHAR(18) NOT NULL,
telephone varCHAR(20) NOT NULL,
address VARCHAR(50)
);
CREATE TABLE cardInfo --银行卡信息表
(
cardID CHAR(19) NOT NULL,
curID VARCHAR(10) NOT NULL,
savingID number NOT NULL,
openDate DATE NOT NULL,
openMoney number NOT NULL,
balance number NOT NULL,
pass CHAR(6) NOT NULL,
IsReportLoss NUMBER(1) NOT NULL,
customerID NUMBER NOT NULL
);
CREATE TABLE tradeInfo --交易信息表
(
tradeDate DATE NOT NULL,
tradeType CHAR(4) NOT NULL,
cardID CHAR(19) NOT NULL,
tradeMoney NUMBER NOT NULL,
remark LONG
);
CREATE TABLE Deposit --存款类型表
(
savingID NUMBER NOT NULL,
savingName VARCHAR(20) NOT NULL,
descrip VARCHAR(50)
);
/*$$$$$$$$$$$$$加约束$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
ALTER TABLE Deposit
ADD CONSTRAINT PK_savingID PRIMARY KEY(savingID);
/* userInfo表的约束
customerID 顾客编号 主键
customerName 开户名 必填
PID 身份证号 必填,只能是18位或15位,身份证号唯一约束
telephone 联系电话 必填,格式为xxxx-xxxxxxxx或手机号11位
address 居住地址 可选输入
*/
--ALTER TABLE userInfo
--drop CONSTRAINT CK_telephone
ALTER TABLE userInfo
ADD CONSTRAINT PK_customerID PRIMARY KEY(customerID);
ALTER TABLE userInfo
ADD CONSTRAINT CK_PID CHECK( length(PID)=18 or length(PID)=15 );
ALTER TABLE userInfo
ADD CONSTRAINT UQ_PID UNIQUE(PID);
ALTER TABLE userInfo
ADD CONSTRAINT CK_telephone CHECK(regexp_like(telephone,'(^\d{3,4}-\d{8}$)|(^\d{11}$)'));
/*cardInfo表的约束
cardID 卡号 必填,主健 , 银行的卡号规则和电话号码一样,一般前8位代表特殊含义,
如某总行某支行等。假定该行要求其营业厅的卡号格式为:1010 3576 xxxx xxx开始
curType 货币 必填,默认为RMB
savingType 存款种类 活期/定活两便/定期
openDate 开户日期 必填,默认为系统当前日期
openMoney 开户金额 必填,不低于1元
balance 余额 必填,不低于1元,否则将销户
pass 密码 必填,6位数字,默认为6个8
IsReportLoss 是否挂失 必填,0/1值,默认为0未挂失
customerID 顾客编号 必填,表示该卡对应的顾客编号,一位顾客可以办理多张卡
*/
ALTER TABLE cardInfo
ADD CONSTRAINT PK_cardID PRIMARY KEY(cardID);
ALTER TABLE cardInfo
ADD CONSTRAINT CK_cardID CHECK(regexp_LIKE(cardID,'1010 3576 \d{4} \d{4}'));
ALTER TABLE cardInfo
MODIFY (curID VARCHAR(10) DEFAULT 'RMB');
--CONSTRAINT CK_savingType CHECK(savingType IN ('活期','定活两便','定期')),
ALTER TABLE cardInfo
MODIFY (openDate DATE DEFAULT sysdate);
ALTER TABLE cardInfo
ADD CONSTRAINT CK_openMoney CHECK(openMoney>=1);
ALTER TABLE cardInfo
ADD CONSTRAINT CK_balance CHECK(balance>=1);
ALTER TABLE cardInfo
ADD CONSTRAINT CK_pass CHECK(regexp_LIKE(pass,'^[0-9]{6}$'));
ALTER TABLE cardInfo
MODIFY (pass CHAR(6) DEFAULT '888888');
ALTER TABLE cardInfo
MODIFY (IsReportLoss NUMBER(1) DEFAULT 0);
ALTER TABLE cardInfo
ADD CONSTRAINT FK_customerID FOREIGN KEY(customerID) REFERENCES userInfo(customerID);
ALTER TABLE cardInfo
ADD CONSTRAINT FK_savingID FOREIGN KEY(savingID) REFERENCES deposit(savingID);
/* tradeInfo表的约束
tradeType 必填,只能是存入/支取
cardID 卡号 必填,外健,可重复索引
tradeMoney 交易金额 必填,大于0
tradeDate 交易日期 必填,默认为系统当前日期
remark 备注 可选输入,其他说明
*/
ALTER TABLE tradeInfo
ADD CONSTRAINT CK_tradeType CHECK(tradeType IN ('存入','支取'));
ALTER TABLE tradeInfo
ADD CONSTRAINT FK_cardID FOREIGN KEY(cardID) REFERENCES cardInfo(cardID);
ALTER TABLE tradeInfo
ADD CONSTRAINT CK_tradeMoney CHECK(tradeMoney>0);
ALTER TABLE tradeInfo
MODIFY (tradeDate DATE DEFAULT sysdate);
Oracle建表空间、用户、标、约束
最新推荐文章于 2024-09-15 21:58:44 发布