数据库系统开发实验二.docx
《数据库系统开发实验二.docx》由会员分享,可在线阅读,更多相关《数据库系统开发实验二.docx(17页珍藏版)》请在冰豆网上搜索。
数据库系统开发实验二
实验报告
姓名:
学号:
班级:
实验:
售后服务管理系统数据建模
时间:
2017年9月25日
一、实验目的
(通过实验要达到什么样的效果,学到什么东西)
二、实验条件
(实验使用软件)
三、实验内容
(实验需要做的具体详细的实验项目)
四、实验要求
(实验中,我们要注意的实验事项和写实验报告的详细要求)
五、实验步骤
(实验步骤包括具体的每个实验的实验方法、实验结果和实验结果分析,按照每步遇到的问题,进行分析解决)
六、问题解答
(回答实验售后服务的相关问题)
七、实验感悟
(总结实验中遇到的问题,以后该怎么解决)
八、附录
(由ER图转化而来的SQL语句)
一、实验目的
学会使用ERwinDataModeler数据建模工具,创建企业合同管理的数据模型,将其中的物理模型生成到SQLServer数据库管理系统,进而学会数据库的基本设计方法,为进一步更深的学习打下基础。
二、实验条件
CAERwinDataModeler和MicrosoftSQLServerManagementStudio
三、实验内容
仔细阅读合同管理应用需求的说明(参见第9章),在此基础上使用ERwinDataModeler数据建模工具创建企业合同管理的数据模型,并将其中的物理模型生成到SQLServer数据库管理系统,根据完成的内容和过程编写一份数据建模的报告,数据建模的重点放在销售服务部分。
需要在报告中将ERwin(也可使用其它数据建模工具)创建的数据模型的ERD放到报告中(可以截图),结合所设计的ERD回答下面问题:
(1)如何实现售后服务中的产品服务期限的?
(2)如何记录售后服务的产品信息?
(3)如何记录技术服务工程师(包括服务专员)的信息?
(4)一个完整的服务信息(如维修一个磁盘可能包括第一次打电话咨询、维修等由多个小服务组成一个大服务)是如何记录的?
四、实验要求
每个小的实验都必须给出具体的实验方法、实验结果与结果分析。
在对每个实验结果的分析中要描述产生正确结果或错误的原因,有些可以写出相应的解决方法。
五、实验步骤
实验方法:
1.利用域定义新的数据类型NAME
2.利用新的变量NAME进行定义变量
3.绘制ER图(logical)
4.将logicalmodel转化为physicalmodel
5.在sqlserver中创建数据库CONTRACT
6.由于版本的问题,所以无法直接连接数据库进行实验,而是通过预览sql语句的形式然后,通过sql语句进行实验
1)由于实验生成寄存器会影响在数据库CONTRACT中的运行,所以,禁止ERWIN产生触发器
2)生成SQL语句
3)在输入执行SQL语句时,新定义的NAME类型无法识别,通过把VARCHAR1(32)改成CHAR(18),执行通过
4)在生成SQL代码时,注意选择sql不要选择oracle,因为这个原因,我从早上到中午一直找bug。
7.新建查询,输入SQL语句,进行创建
实验结果:
完成实验的ER建模和数据库的构建
实验分析:
仔细阅读实验指导书和认真实验,遇到问题及时解决问题,实验方法和操作没有问题,自然可以完成实验的要求。
六、结合所设计的ERD回答下面问题
(1)如何实现售后服务中的产品服务期限的?
答:
实验中,在AFTER_SALE_SERVICE中,设有SERVICE_BEGIN_TIME和SERVICE_END_TIME,我们可以同结束时间减去开始时间,就可以得到产品的服务期限。
(2)如何记录售后服务的产品信息?
答:
根据制定的ER图,我们可以根据实体AFTER_SALE_SERVICE和实体PRODUCT以及ORDER_PRODUCT的联系得到售后服务的产品信息,如可以通过外键PRODUCT_ID和ORDER_HEADER_ID找到对应的订单明细,然后从对应的订单明细中,再通过外键PRODUCT_ID找到对应的那个产品信息。
(3)如何记录技术服务工程师(包括服务专员)的信息?
答:
我们直接可以通过实体AFTER_SALE_SERVICE的EMPLOYEE_ID找到实体EMPLOYEE对应的技术服务工程师的信息也可以找到服务专员的信息。
(4)一个完整的服务信息(如维修一个磁盘可能包括第一次打电话咨询、维修等由多个小服务组成一个大服务)是如何记录的?
答:
一个大服务可以由很多小的小服务来组成,可以建立一个自己到自己的递归联系来记录,比如我们可以建立一个AFTER_SALE_SERVICE到AFTER_SALE_SERVICE的递归联系,然后,我们就可以通过AFTER_SALE_ID进行对小服务的记录和递归查询了。
七、实验感悟
八、附录:
实验中从ER图转变成的SQL语句
CREATETABLEAFTER_SALE_SERVICE
(
AFTER_SALE_SERVICE_IDCHAR(18)NOTNULL,
SERVICE_BEGIN_TIMECHAR(18)NULL,
SERVICE_END_TIMECHAR(18)NULL,
SERVICE_TYPECHAR(18)NULL,
SERVICE_SPECIALISTCHAR(18)NULL,
CONTRACT_IDCHAR(18)NULL,
SERVICE_DETAILCHAR(18)NULL,
ORGNIZATION_IDCHAR(18)NULL,
CUSTOMER_NAMECHAR(18)NULL,
CUSTOMER_PHONECHAR(18)NULL
);
CREATEUNIQUEINDEXXPKAFTER_SALE_SERVICEONAFTER_SALE_SERVICE
(AFTER_SALE_SERVICE_IDASC);
ALTERTABLEAFTER_SALE_SERVICE
ADDCONSTRAINTXPKAFTER_SALE_SERVICEPRIMARYKEY(AFTER_SALE_SERVICE_ID);
CREATETABLECONTRACT
(
CONTRACT_IDCHAR(18)NOTNULL,
NAMECHAR(18)NULL,
AMOUNTCHAR(18)NULL,
TECHNICAL_RESULTCHAR(18)NULL,
TECHNICAL_DATECHAR(18)NULL,
BUSINESS_RESULTCHAR(18)NULL,
BUSINESS_DATECHAR(18)NULL,
SALE_IDCHAR(18)NOTNULL,
TECHNICAL_IDCHAR(18)NULL,
BUSINESS_IDCHAR(18)NULL,
DECRIPTIONCHAR(18)NULL
);
CREATEUNIQUEINDEXXPKCONTRACTONCONTRACT
(CONTRACT_IDASC);
ALTERTABLECONTRACT
ADDCONSTRAINTXPKCONTRACTPRIMARYKEY(CONTRACT_ID);
CREATETABLECONTRACT_PRODUCT
(
PRICECHAR(18)NULL,
DISCOUNTCHAR(18)NULL,
AMOUNTCHAR(18)NULL,
PRODUCT_IDCHAR(18)NOTNULL,
CONTRACT_IDCHAR(18)NOTNULL
);
CREATEUNIQUEINDEXXPKCONTRACT_PRODUCTONCONTRACT_PRODUCT
(PRODUCT_IDASC,CONTRACT_IDASC);
ALTERTABLECONTRACT_PRODUCT
ADDCONSTRAINTXPKCONTRACT_PRODUCTPRIMARYKEY(PRODUCT_ID,CONTRACT_ID);
CREATETABLECUSTOMER
(
BANK_ACCOUNT_CREDITCHAR(18)NULL,
ORGNIZATION_IDCHAR(18)NOTNULL,
CREDITCHAR(18)NULL,
CUSTOMER_NAMECHAR(18)NOTNULL,
CUSTOMER_PHONECHAR(18)NOTNULL
);
CREATEUNIQUEINDEXXPKCUSTOMERONCUSTOMER
(ORGNIZATION_IDASC,CUSTOMER_NAMEASC,CUSTOMER_PHONEASC);
ALTERTABLECUSTOMER
ADDCONSTRAINTXPKCUSTOMERPRIMARYKEY(ORGNIZATION_ID,CUSTOMER_NAME,CUSTOMER_PHONE);
CREATETABLEDEPARTMENT
(
ORGNIZATION_IDCHAR(18)NOTNULL
);
CREATEUNIQUEINDEXXPKDEPARTMENTONDEPARTMENT
(ORGNIZATION_IDASC);
ALTERTABLEDEPARTMENT
ADDCONSTRAINTXPKDEPARTMENTPRIMARYKEY(ORGNIZATION_ID);
CREATETABLEEMPLOYEE
(
EMPLOEE_IDCHAR(18)NOTNULL,
MANAGER_IDCHAR(18)NULL,
NAMECHAR(18)NULL,
PHONECHAR(18)NULL,
MOBILECHAR(18)NULL,
EMAILCHAR(18)NULL,
ORGNIZATION_IDCHAR(18)NULL
);
CREATEUNIQUEINDEXXPKEMPLOYEEONEMPLOYEE
(EMPLOEE_IDASC);
ALTERTABLEEMPLOYEE
ADDCONSTRAINTXPKEMPLOYEEPRIMARYKEY(EMPLOEE_ID);
CREATETABLEORDER_DETAIL
(
AMOUNTCHAR(18)NULL,
PRICECHAR(18)NULL,
DISCOUNTCHAR(18)NULL,
PRODUCT_IDCHAR(18)NOTNULL,
ORDER_HEADER_IDCHAR(18)NOTNULL,
SERVICE_IDCHAR(18)NOTNULL
);
CREATEUNIQUEINDEXXPKORDER_DETAILONORDER_DETAIL
(PRODUCT_IDASC,ORDER_HEADER_IDASC,SERVICE_IDASC);
ALTERTABLEORDER_DETAIL
ADDCONSTRAINTXPKORDER_DETAILPRIMARYKEY(PRODUCT_ID,ORDER_HEADER_ID,SERVICE_ID);
CREATETABLEORDER_HEADER
(
ORDER_HEADER_IDCHAR(18)NOTNULL,
ORDER_DATECHAR(18)NULL,
NAMECHAR(18)NULL,
CONTRACT_IDCHAR(18)NULL
);
CREATEUNIQUEINDEXXPKORDER_HEADERONORDER_HEADER
(ORDER_HEADER_IDASC);
ALTERTABLEORDER_HEADER
ADDCONSTRAINTXPKORDER_HEADERPRIMARYKEY(ORDER_HEADER_ID);
CREATETABLEORGNIZATION
(
NAMECHAR(18)NULL,
ORGNIZATION_IDCHAR(18)NOTNULL,
ADDRESSCHAR(18)NULL,
PHONECHAR(18)NULL,
TYPECHAR(18)NULL
);
CREATEUNIQUEINDEXXPKORGNIZATIONONORGNIZATION
(ORGNIZATION_IDASC);
ALTERTABLEORGNIZATION
ADDCONSTRAINTXPKORGNIZATIONPRIMARYKEY(ORGNIZATION_ID);
CREATETABLEPAYMENT
(
PAYMENT_IDCHAR(18)NOTNULL,
AMOUNTCHAR(18)NULL,
PAY_DATECHAR(18)NULL,
CONTRACT_IDCHAR(18)NULL
);
CREATEUNIQUEINDEXXPKPAYMENTONPAYMENT
(PAYMENT_IDASC);
ALTERTABLEPAYMENT
ADDCONSTRAINTXPKPAYMENTPRIMARYKEY(PAYMENT_ID);
CREATETABLEPRODUCT
(
PRODUCT_IDCHAR(18)NOTNULL,
NAMECHAR(18)NULL,
PRICECHAR(18)NULL,
VENDOR_IDCHAR(18)NULL
);
CREATEUNIQUEINDEXXPKPRODUCTONPRODUCT
(PRODUCT_IDASC);
ALTERTABLEPRODUCT
ADDCONSTRAINTXPKPRODUCTPRIMARYKEY(PRODUCT_ID);
CREATETABLERECEIVED_PAY
(
RECEIVED_PAY_IDCHAR(18)NOTNULL,
AMOUNTCHAR(18)NULL,
RECEIVED_DATECHAR(18)NULL,
CONTRACT_IDCHAR(18)NULL
);
CREATEUNIQUEINDEXXPKRECEIVED_PAYONRECEIVED_PAY
(RECEIVED_PAY_IDASC);
ALTERTABLERECEIVED_PAY
ADDCONSTRAINTXPKRECEIVED_PAYPRIMARYKEY(RECEIVED_PAY_ID);
CREATETABLEVENDOR
(
COUNTRYCHAR(18)NULL,
ORGNIZATION_IDCHAR(18)NOTNULL
);
CREATEUNIQUEINDEXXPKVENDORONVENDOR
(ORGNIZATION_IDASC);
ALTERTABLEVENDOR
ADDCONSTRAINTXPKVENDORPRIMARYKEY(ORGNIZATION_ID);
ALTERTABLEAFTER_SALE_SERVICE
ADD(CONSTRAINTR_30FOREIGNKEY(SERVICE_SPECIALIST)REFERENCESEMPLOYEE(EMPLOEE_ID)ONDELETESETNULL);
ALTERTABLEAFTER_SALE_SERVICE
ADD(CONSTRAINTR_36FOREIGNKEY(CONTRACT_ID)REFERENCESCONTRACT(CONTRACT_ID)ONDELETESETNULL);
ALTERTABLEAFTER_SALE_SERVICE
ADD(CONSTRAINTR_76FOREIGNKEY(ORGNIZATION_ID,CUSTOMER_NAME,CUSTOMER_PHONE)REFERENCESCUSTOMER(ORGNIZATION_ID,CUSTOMER_NAME,CUSTOMER_PHONE)ONDELETESETNULL);
ALTERTABLECONTRACT
ADD(CONSTRAINTR_26FOREIGNKEY(SALE_ID)REFERENCESEMPLOYEE(EMPLOEE_ID));
ALTERTABLECONTRACT
ADD(CONSTRAINTR_27FOREIGNKEY(TECHNICAL_ID)REFERENCESEMPLOYEE(EMPLOEE_ID)ONDELETESETNULL);
ALTERTABLECONTRACT
ADD(CONSTRAINTR_29FOREIGNKEY(BUSINESS_ID)REFERENCESEMPLOYEE(EMPLOEE_ID)ONDELETESETNULL);
ALTERTABLECONTRACT_PRODUCT
ADD(CONSTRAINTR_33FOREIGNKEY(PRODUCT_ID)REFERENCESPRODUCT(PRODUCT_ID));
ALTERTABLECONTRACT_PRODUCT
ADD(CONSTRAINTR_37FOREIGNKEY(CONTRACT_ID)REFERENCESCONTRACT(CONTRACT_ID));
ALTERTABLECUSTOMER
ADD(FOREIGNKEY(ORGNIZATION_ID)REFERENCESORGNIZATION(ORGNIZATION_ID)ONDELETECASCADE);
ALTERTABLEDEPARTMENT
ADD(FOREIGNKEY(ORGNIZATION_ID)REFERENCESORGNIZATION(ORGNIZATION_ID)ONDELETECASCADE);
ALTERTABLEEMPLOYEE
ADD(CONSTRAINTR_25FOREIGNKEY(MANAGER_ID)REFERENCESEMPLOYEE(EMPLOEE_ID)ONDELETESETNULL);
ALTERTABLEEMPLOYEE
ADD(CONSTRAINTR_21FOREIGNKEY(ORGNIZATION_ID)REFERENCESDEPARTMENT(ORGNIZATION_ID)ONDELETESETNULL);
ALTERTABLEORDER_DETAIL
ADD(CONSTRAINTR_34FOREIGNKEY(PRODUCT_ID)REFERENCESPRODUCT(PRODUCT_ID));
ALTERTABLEORDER_DETAIL
ADD(CONSTRAINTR_42FOREIGNKEY(ORDER_HEADER_ID)REFERENCESORDER_HEADER(ORDER_HEADER_ID));
ALTERTABLEORDER_DETAIL
ADD(CONSTRAINTR_74FOREIGNKEY(SERVICE_ID)REFERENCESAFTER_SALE_SERVICE(AFTER_SALE_SERVICE_ID));
ALTERTABLEORDER_HEADER
ADD(CONSTRAINTR_38FOREIGNKEY(CONTRACT_ID)REFERENCESCONTRACT(CONTRACT_ID)ONDELETESETNULL);
ALTERTABLEPAYMENT
ADD(CONSTRAINTR_39FOREIGNKEY(CONTRACT_ID)REFERENCESCONTRACT(CONTRACT_ID)ONDELETESETNULL);
ALTERTABLEPRODUCT
ADD(CONSTRAINTR_32FOREIGNKEY(VENDOR_ID)REFERENCESVENDOR(ORGNIZATION_ID)ONDELETESETNULL);
ALTERTABLERECEIVED_PAY
ADD(CONSTRAINTR_40FOREIGNKEY(CONTRACT_ID)REFERENCESCONTRACT(CONTRACT_ID)ONDELETESETNULL);
ALTERTABLEVENDOR
ADD(FOREIGNKEY(ORGNIZATION_ID)REFERENCESORGNIZATION(ORGNIZATION_ID)ONDELETECASCADE);