Islamic University of Gaza Faculty of Engineering Department of Computer Engineering Fall 2011 ECOM 4113: System Lab Eng. Ahmed Abumarasa

Database Lab

Lab 2

Database

 Introduction:

The previous lab discuses give us an overview of MSSQL (SQL server 2008), connection, data types and DDL language to create new database; in this lab we will continue DDL language which deal with tables.

 Tables in DBMS:

A table is a set of data elements (values) that is organized using a model of vertical columns (which are identified by their name) and horizontal rows. A table has a specified number of columns, but can have any number of rows. Each row is identified by the values appearing in a particular column subset which has been identified as a candidate key.

Table Parts:  Columns names (no two columns have the same name in one table).  Columns data type (according to the DBMS).  Some attribute and constraint.  Relationship with another table.  Table name, for name convention table name start with a letter, related to the content of the table and don’t use spaces in the name.

Figure 2.1 show a preview for a table with its parts.

Figure 2.1

 Tables is SQL server:  Create table:

[Use database] create table [database.dbo.]tabble_name ( column1 datatype [attribute] [,another columns] )

e.g.

create table lab2.dbo.table1 ( id int )

Note:Tables must at least have one column

 Some attribute. Before discuses the attribute of the columns we will create a new table with some columns to assign the attribute step by step.

use lab2 create table employee( id int, name nvarchar(20), bd date )

o NOT NULL

Determine whether null values are allowed in the column. NULL is not strictly a constraint but can be specified just like NOT NULL.

For our table neither name nor id can be null, so we will change the table to:

use lab2 create table employee( id int not null, name nvarchar(20) not null, bd date )

o UNIQUE:

Determine where the column allows duplicated value, the default value is not unique (implicit in SQL) Now For our table name and id are unique, so we will change the table to:

create table employee( id int not null unique, name nvarchar(20) not null unique, bd date )

If any column set as unique and allow null, then this will allow only one record to be null. o :

Primary key is a constraint that enforces entity integrity for a specified column or columns through a unique index. Only one PRIMARY KEY constraint can be created per table.

For our table we can use any unique column to be a primary key, I will use Id to be the primary key

create table employee( id int not null unique primary key, name nvarchar(20) not null unique, bd date ) Now I have one column unique and primary key, if I execute this an error will appear, so we need to delete the unique attribute.

create table employee( id int not null primary key, name nvarchar(20) not null unique, bd date ) o IDENTITY

IDENTITY indicates that the new column is an identity column. When a new row is added to the table, the Database Engine provides a unique, incremental value for the column. Identity columns are typically used with PRIMARY KEY constraints to serve as the unique row identifier for the table. The IDENTITY property can be assigned to tinyint, smallint, int, bigint, decimal (p,0), or numeric(p,0) columns. Only one identity column can be created per table. Bound defaults and DEFAULT constraints cannot be used with an identity column. Both the seed and increment or neither must be specified. If neither is specified, the default is (1, 1).

use lab2 create table employee( id int not null primary key identity(1,2), name nvarchar(20) not null unique, bd date )

With IDENTITY no need for NOT NULL or UNIQUE

o DEFAULT

Specifies the value provided for the column when a value is not explicitly supplied during an . DEFAULT definitions can be applied to any columns except those defined as timestamp, or those with the IDENTITY property.

create table employee( id int not null primary key identity(1,2), name nvarchar(20) not null unique, bd date default '1-1-1990' )

o AS (Computed column expression)

Computed column expression is an expression that defines the value of a computed column. A computed column is a virtual column that is not physically stored in the table, unless the column is marked PERSISTED. We want to compute the age of record we do the next:

create table employee( id int not null primary key identity(1,2), name nvarchar(20) not null unique, bd date default '1-1-1990', Age AS (year(getdate()) - year(bd)) [PERSISTED] )

 SQL constraints: There is some constraints can be used in SQL server to enforce user to insert specific data format and relations.

 PRIMARY KEY:

We can do it as above if there one column represent the primary key, but if we the primary key consist of multi columns we have to make a constraint.

constraint constrantName primary key (columnname,[columnname2] )

E.g. constraint primary_key_const primary key (id,name)

 UNIQUE:

Like primary key we can make it beside every column or by adding a constraint

constraint constrantName Unique (columnname,[columnname2] )

E.g. constraint unique_const unique (id,name)

 Check:

This constraint used to check the data to be similar as declare

constraint constrantName check (columnname,[columnname2] )

E.g. constraint chek_const check (id <8)

This enforces the user to inter id less than 8, or whatever you specify the constraint.

 Foreign Key:

This is one of the most important constraints; this specifies the relation between tables if we want to make any column foreign key to another table, we have to set a constraint to do this.

Suppose we have table department and every employee will work in one department, so we add a column refer to the department number in department table.

Formula :

constraint constrantName FOREIGN KEY (column name) REFERENCES secondtableName [on delete no action | set null| set default|CASCADE] [on update no action |set null| set default|CASCADE]

E.g.

constraint foreign_const FOREIGN KEY (depId) REFERENCES department on delete set null

o NO ACTION

The Database Engine raises an error and the delete action on the row in the parent table is rolled back.

o CASCADE

Corresponding rows are deleted from the referencing table if that row is deleted from the parent table.

o SET NULL

All the values that make up the foreign key are set to NULL if the corresponding row in the parent table is deleted. For this constraint to execute, the foreign key columns must be null able.

o SET DEFAULT

All the values that make up the foreign key are set to their default values if the corresponding row in the parent table is deleted. For this constraint to execute, all foreign key columns must have default definitions. If a column is nullable, and there is no explicit default value set, NULL becomes the implicit default value of the column.

Now our table code becomes:

create table employee(

id int identity, name nvarchar(20), bd date default '1-1-1990', Age AS (getdate()- bd), depId int ,

constraint primary_key_const primary key (id), constraint unique_const unique (id,name), constraint chek_const check (bd

)  Alter table Some time we need to change the design of the table such columns names, data type, adding constraint, delete column add column …etc

 Add column:

alter table table_name add newColumnName newColumnDataType

E.g. alter table employee add gender bit default 1

 Changing the data type of a column

alter table table_name ALTER COLUMN column_name newDatatype

E.g.

alter table employee ALTER COLUMN name nvarchar(40)

 Drop column (delete column):

alter table table_name drop column column_name

E.g.

alter table employee drop column gender

 Add constraint

alter table table_name add constraint –constraint body

E.g.

alter table employee add constraint chek_const2 check (bd > '1-1-1900')

 Drop constraint

alter table table_name drop constraint_name

E.g. alter table employee drop chek_const2

 Disabling and re-enabling a constraint

o Disable: alter table table_name NOCHECK CONSTRAINT constraint_name; e.g.

alter table employee NOCHECK CONSTRAINT chek_const;

After disable constraint we can insert any data without the disable constraint.

o Enable alter table table_name CHECK CONSTRAINT constraint_name; E.g.

alter table employee CHECK CONSTRAINT chek_const;

After enable the constraint every thing return to it it`s status

 Drop Table drop table table_name

E.g. drop table employee

 Lab exercises:

Use the school database used in lab1 to:

1. create new table name it teacher with the column:  id: integer, auto increment and set as primary key.  SSN: char(9) unique.  name: nvarcar(40) doesn’t allow null .  mobile: char(10) allow null.

2. create another table Class with:  id: integer, auto increment and set as primary key.  level: int doesn’t allow null .  section: int doesn’t allow null .  tid: (teacher of class) int has default value =0.

3. create new table name it student with the column:  SId: integer, auto increment and set as primary key.  fname: (first name) nvarcar(20) doesn’t allow null .  Lname: (last name) nvarcar(30) doesn’t allow null.  Bdate: (birth date) date doesn’t allow null.  Tel: (home telephone) char(10) allow null.  classId: int.

4. add the following constraints:  No two classes have the same (level and section).  Tid in the class table is a foreign key refer to the id column in teacher table, when a teacher deleted or updated set the value to the default.  The full name (fname and lname) for student must be unique.  The age of student must be at least 6 years.  classId: in the student table is a foreign key refer to the id column in class table, when a class deleted or updated set delete all student in this class.