here is a picture of the diagram we did in class. I also posted it on Github as a viso diagram
Tuesday, May 31, 2016
Wednesday, May 25, 2016
Stored procedures
--stored procedures
--parameterized view
use Community_Assist
go
Create proc usp_HRViewProc
@EmployeeKey int
As
Select PersonLastName,
PersonfirstName,
PersonEmail,
EmployeeHireDate,
EmployeeAnnualSalary
From Person p
inner Join Employee e
on p.PersonKey=e.PersonKey
Where EmployeeKey = @EmployeeKey
exec usp_HRViewProc @EmployeeKey=2
Go
--Create hash password function
Alter function fx_hashPassword2
(@seed int, @password nvarchar(50))
returns varbinary(500)
As
Begin
Declare @newPassword nvarchar(70)
set @newPassword = 
cast(@seed as nvarchar(20)) + @Password
Declare @hashed varbinary(500)
set @hashed = hashbytes('sha2_512', @newPassword)
return @hashed
End
Select * from businessrule
go
--new person stored procedure
Alter proc usp_NewPerson
@lastName nvarchar(255),
@FirstName nvarchar(255)=null,
@Email nvarchar(255),
@password nvarchar(50),
@AptNumber nvarchar(255)=null,
@Street nvarchar(255),
@City nvarchar(255)='Seattle',
@State nvarchar(255)='WA',
@Zip nvarchar(255),
@HomePhone nvarchar(255)
As
--test to see if person exists
if exists
 (Select PersonLastName, PersonEmail From Person
 Where PersonLastName=@LastName
 And PersonEmail=@Email)
 Begin--begin if
 Print 'Already registered'
 return
 End--end if
--create the password hash
Declare @seed int
Set @seed = dbo.fx_GetSeed()
declare @hashedPass varbinary(500)
set @hashedPass = dbo.fx_HashPassword(@seed,@password)
Begin tran --start a transaction
Begin try -- begin try
--insert into person
Insert into Person(  
PersonLastName, PersonFirstName,
 PersonEmail, PersonPassWord, 
 PersonEntryDate, PersonPassWordSeed)
 Values(@LastName, @FirstName,
 @Email, @hashedPass,GetDate(),@seed)
 --get the key of the person just inserted
 Declare @key int = ident_current('Person')
 --insert into PersonAddress
 Insert into PersonAddress(
 PersonAddressApt,
 PersonAddressStreet, 
 PersonAddressCity, PersonAddressState, 
 PersonAddressZip, PersonKey)
 Values( @AptNumber,@street,@city,@state,@Zip,@key)
 Insert into Contact([ContactNumber],
 [ContactTypeKey], [PersonKey])
 Values (@HomePhone, 1, @Key)
 Commit Tran --commit the transaction if no error
 End Try
 Begin Catch
 Rollback Tran
 Print Error_Message()
 End Catch
 exec usp_NewPerson
 @lastName = 'Conger', 
 @FirstName='Steve', 
 @Email='spconger@gmail.com', 
 @password='congerPass', 
 @Street='101 nowhere bld', 
 @Zip='98122', 
 @HomePhone='2065551201'
 Select * from PersonAddress
 Select * from Contact
Monday, May 23, 2016
Functions temp tables
use Community_Assist
--temporary tables 
--local temporary table. Local to this one session
Create Table #TempGrants
(
 GrantRequestKey int,
 GrantRequestDate datetime,
 PersonKey int,
 GrantTypeKey int,
 GrantRequestAmount money
)
insert into #tempGrants(GrantRequestKey,
GrantRequestDate,PersonKey, GrantTypeKey,
GrantRequestAmount)
Select GrantRequestKey,
GrantRequestDate,PersonKey, GrantTypeKey,
GrantRequestAmount from GrantRequest
Where Month(GrantRequestDate)=9
Select * from #TempGrants
--Global temporary table
Create Table ##TempGrantsGlobal
(
 GrantRequestKey int,
 GrantRequestDate datetime,
 PersonKey int,
 GrantTypeKey int,
 GrantRequestAmount money
)
insert into ##tempGrantsGlobal(GrantRequestKey,
GrantRequestDate,PersonKey, GrantTypeKey,
GrantRequestAmount)
Select GrantRequestKey,
GrantRequestDate,PersonKey, GrantTypeKey,
GrantRequestAmount from GrantRequest
Where Month(GrantRequestDate)=9
Select * from ##TempGrantsGlobal
--Functions
Go
Create Function fx_Cube
(@number int)
returns int
As
Begin
Declare @Cube int
Set @cube = @number * @number * @number
return @Cube
End
Go
Select dbo.fx_Cube(3) as [Cube]
--stored procedures
--triggers
 Select PersonKey,dbo.fx_cube(PersonKey) as cubed
 from Person
 order by cubed
 go
 Alter function fx_PercentAmount
 (@amount money, @percentage decimal(10,2)) -- parameters
 returns money --return type
 As
 Begin
 if(not @amount=0) --check to make sure not 0
 Begin --start outer if
 
     if(@Percentage > 1) --check to see how % entered
     Begin --begin inner if
   Set @Percentage = @percentage / 100
     End --end inner if
   Declare @result money --declare variable for result
   Set @result = @amount * @percentage --calculate amount
 End --end outer if
 Else --begin else
 Begin 
 Set @Result=0;
 End --end else
  return @result --return results
 End
 Select DonationAmount, dbo.fx_PercentAmount(DonationAmount, 20) as Org, 
 dbo.fx_PercentAmount(donationAmount, .8) as charity
 From Donation
  Select Sum(DonationAmount) Total, dbo.fx_PercentAmount(sum(DonationAmount), 20) as Org, 
 dbo.fx_PercentAmount(Sum(donationAmount), .8) as charity
 From Donation
Wednesday, May 18, 2016
Transaction try catch
use Community_Assist
--this begins a manual transaction
Begin Tran
--try tries all the code before 
--if there are no errors
--it will execute all the code 
--commit the transaction and exit
--if there is an error it will drop to the catch
--rollback the transaction and print the error message
Begin Try
Insert into Person(
[PersonLastName],
[PersonFirstName],
[PersonEmail],
[PersonEntryDate])
Values('SquarePants',
'SpongeBuddy',
'sponge@bikinibottom.com',
GetDate())
Insert into PersonAddress(
[PersonAddressStreet],
[PersonAddressCity],
[PersonAddressState],
[PersonAddressZip],
[PersonKey])
Values('100 Pinapple lane',
'Bikinibottom',
'se',
'00001',
ident_current('Person'))
Insert into contact(
[ContactNumber],
[ContactTypeKey],
[PersonKey])
Values ('2005551245',
1,
ident_Current('Person'))
Commit tran
End Try
Begin Catch
Rollback tran
print error_message()
End Catch
Select * from Contact
Thursday, May 12, 2016
class Relationships
Association means simply that two classes talk to each other. One calls methods in the other
Inheritance allows an inheriting class to get all the public fields and methods of the parent. It always proceeds from the more general, more abstract, to the more specific or concrete. The child class must be of the same kind as the parent.
An interface is a collection of method signatures. A class that implements an interface must provide a body for all the method signatures in the interface.
Composition is a relation where one class in totally contained in another class. If the container class is destroyed (goes out of scope) so does the contained class.
Aggregation is a relationship where one class is contained in the other, but the contained class persists even when the containing class is destroyed
Wednesday, May 11, 2016
Set Operators and modifying data
USE [Community_Assist]
GO
/****** Object:  View [dbo].[vw_HumanResources]    Script Date: 5/11/2016 10:11:00 AM ******/
ALTER view [dbo].[vw_HumanResources] with Schemabinding
AS
Select PersonLastName [LastName],
PersonFirstName [FirstName],
PersonEmail Email,
PersonAddressStreet [Address],
PersonAddressCity City,
PersonAddressZip ZipCode,
EmployeeHireDate HireDate
From dbo.Person p
Inner Join dbo.PersonAddress pa
on p.PersonKey=pa.PersonKey
inner join dbo.Employee e
on e.PersonKey = p.PersonKey
GO
--cross apply
Select Distinct a.GrantTypeKey, c.GrantRequestAmount
From dbo.GrantRequest a
cross Apply
(Select grantTypeKey, grantRequestAmount
From GrantRequest as b
Where b.GrantTypeKey = a.GrantTypeKey
Order By b.GrantRequestAmount desc, GrantTypeKey desc
Offset 0 rows fetch first 3 rows only) as c
Begin tran
Alter table person
Drop column PersonEmail
Rollback tran
--Set operators and modifying data
--Windows functions pivot
Select PersonKey, PersonFirstName, PersonLastName, PersonEmail
From Person
Union
Select EmployeeKey,EmployeefirstName, EmployeeLastName, EmployeeEmail
From MetroAlt.dbo.Employee
Select PersonAddressCity From PersonAddress
intersect
Select EmployeeCity from MetroAlt.dbo.Employee
Select PersonAddressCity From PersonAddress
Except
Select EmployeeCity from MetroAlt.dbo.Employee
Select EmployeeCity from MetroAlt.dbo.Employee
except
Select PersonAddressCity From PersonAddress
/******************************************
*********Not part of assignment*********/
--ranking functions
Select GrantRequestKey, GrantTypeKey, GrantRequestAmount,
Row_Number() over (order by GrantRequestAmount desc) as RowNumber,
Rank() over (order by GrantRequestAmount desc) as [Rank],
Dense_rank() over (order by GrantRequestAmount desc) as [DenseRank],
Ntile(10) over (order by GrantRequestAmount desc) as [NTile]
From GrantRequest
Order by GrantRequestAmount desc
--partition functions
Select GrantRequestKey, GrantTypeKey, GrantRequestAmount,
Sum(GrantRequestAmount) over() as TotalAllocation,
sum(GrantRequestAmount) over(partition by GrantTypeKey) as PerType,
(sum(GrantRequestAmount) over(partition by GrantTypeKey) /
Sum(GrantRequestAmount) over() * 100) as [TypePercentOfWhole],
GrantRequestAmount/
sum(GrantRequestAmount) over(partition by GrantTypeKey) * 100 as GrantPercentOfType
From GrantRequest
Order by GrantTypeKey 
--pivot
Select * from GrantRequest
Select  [Month], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10]
From (Select Month(GrantRequestDate) as [Month] ,GrantTypeKey, GrantRequestKey
From dbo.GrantRequest) as a
pivot (Count(GrantRequestKey) for GrantTypeKey in 
    ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10])) AS b
/*************************************************/
--Inserts
Insert into person
(PersonLastName, PersonFirstName, PersonEmail,  PersonEntryDate)
Values('Simpson', 'Homer', 'Homer@springfield.com', GetDate()),
('Simpson','Marge','Marge@springfield.com',GetDate())
Select * from Person
Create Table Person2
(
    Lastname nvarchar(225),
 FirstName nvarchar(255),
 Email nvarchar(255)
)
Insert into Person2(LastName, firstname, email)
Select PersonLastName, PersonFirstName, PersonEmail
From Person
Select * from Person2
Begin tran
Update Person2
Set FirstName='Jason'
Where Email='JAnderson@gmail.com'
Commit Tran
Update Person2
Set LastName='Smith'
Rollback tran
Delete from Person2
Where PersonKey=130
Select * from Person
Drop Table Person2
Wednesday, May 4, 2016
Table Expressions
--Table Expressions Use Community_Assist --Table expressions are Subqueries in the from clause Select PersonKey, [Last], [First], City From (Select p.PersonKey, PersonLastName [Last], PersonFirstName [First], PersonAddressCity City From Person p inner join PersonAddress pa on p.PersonKey =pa.PersonKey Where PersonAddressCity='Bellevue') as BellevueResidents --the subquery must be given a table name --as alias Select RequestMonth, ServiceName, Count(ServiceName) as [Count] From (Select Month(GrantRequestDate) RequestMonth, GrantTypename ServiceName From GrantRequest gr inner Join GrantType gt on gr.GrantTypeKey=gt.GrantTypeKey) as GrantCount Group by RequestMonth, ServiceName --Common table Expressions are the same as --Table Expressions but structured differently --they define the table query first go with BellevueResidents as ( Select p.PersonKey, PersonLastName [Last], PersonFirstName [First], PersonAddressCity City From Person p inner join PersonAddress pa on p.PersonKey =pa.PersonKey Where PersonAddressCity='Bellevue' ) Select [Last], [first], city From BellevueResidents Go With ServiceCount as ( Select Month(GrantRequestDate) RequestMonth, GrantTypename ServiceName From GrantRequest gr inner Join GrantType gt on gr.GrantTypeKey=gt.GrantTypeKey ) Select RequestMonth, ServiceName, Count(ServiceName) [Count] from ServiceCount Group by RequestMonth, ServiceName Go --this defines a variable --and sets the value --It is then used in the common table expression Declare @GrantTypeKey int Set @GrantTypeKey = 5;--one of the only place ; is required With ServiceCount as ( Select Month(GrantRequestDate) RequestMonth, GrantTypename ServiceName From GrantRequest gr inner Join GrantType gt on gr.GrantTypeKey=gt.GrantTypeKey Where gt.GrantTypeKey=@GrantTypeKey ) Select RequestMonth, ServiceName, Count(ServiceName) [Count] from ServiceCount Group by RequestMonth, ServiceName --views are stored queries. --They can be used to provide --a set of users views of the database --that corrispond to how they use the database Go Alter view vw_HumanResources AS Select PersonLastName [LastName], PersonFirstName [FirstName], PersonEmail Email, PersonAddressStreet [Address], PersonAddressCity City, PersonAddressZip ZipCode, EmployeeHireDate HireDate From Person p Inner Join PersonAddress pa on p.PersonKey=pa.PersonKey inner join Employee e on e.PersonKey = p.PersonKey go Select [lastName], [FirstName], City, HireDate From vw_HumanResources --won't work because you can't see underlying fields Select PersonLastName from vw_HumanResources go -- a schema, in this context, --is a collection of related objects Create schema HumanResources Go --this view belongs to the humanResources schema Create view HumanResources.vw_HR AS Select PersonLastName [LastName], PersonFirstName [FirstName], PersonEmail Email, PersonAddressStreet [Address], PersonAddressCity City, PersonAddressZip ZipCode, EmployeeHireDate HireDate From Person p Inner Join PersonAddress pa on p.PersonKey=pa.PersonKey inner join Employee e on e.PersonKey = p.PersonKey; select * from HumanResources.vw_HR; Select * From [SccITI\Kpowell].vw_hr Go --this is a table function --it effectively Create function fx_Employee (@GrantTypeKey int) returns Table As Return Select GrantRequestKey, GrantRequestDate,PersonKey, GrantTypeKey, GrantRequestExplanation, GrantRequestAmount From GrantRequest Where GrantTypeKey = @GrantTypeKey Go --table functions are called in the from Select * from dbo.fx_Employee(3)
Tuesday, May 3, 2016
Activity Diagrams
Sunday, May 1, 2016
GitHub Two
Copying, Downloading and Forking From Website
In this tutorial I will discuss how to get files from GitHub to use in your own coding.
Copying code
It is easy to copy code. Go to the repository with the code you want and then open the code file.Click on the Raw Button. This will give you the code as pure text, minus any formatting or web site information.
Once you have it in Raw view Select the code you wish to use and copy it.
Downloading
Another way to get the code is simply to download it as a zip file. Once you have extracted it you can simply run the program--as long as all the dependencies such as Databases and other libraries are in place.
Forking
Forking allows you to make a copy of someone's repository on your site. To do this I am going to go to another person's Repositories and Fork it to my own. I am going to use the site that Github uses in their tutorial, https://github.com/octocat/Spoon-Knife. I am not going to show Pull requests which allow you to notify the person you forked from and other interested uses of your changes to the original. I am also not going to go into how to keep the repositories in sync. For that look at the tutorial.
Click the Fork Button. There is a please wait screen and then the code is copied to your GitHub site.
Windows Client
For the Windows client, I am just going to focus on cloning or copying a site. I will clone one of my own repositories onto my computer.
First, I will click the plus sign--the same one you use to create a new repository, only this time I will choose clone. From a drop down list of repositories on my site I select Inheritance Example Java.
Click the check mark and choose where to save the cloned Repository. Now the repository is on your computer.
If you want to clone someone else's repository, first fork it to your GitHub account, then clone it.
Command Line
To copy or clone a repository from the command line is really simple. It also has the advantage that you can copy someone else's repository without first forking it. Here is the command to copy that sample Spoon-Knife repository:
git clone git://github.com/octocat/Spoon-Knife.git
Here is the screenshot of the command console
In the Third part we will look at version control
