تمرينات سري سوم

1384/02/28 ‫ﺗﺎرﻳﺦ ﺗﺤﻮﻳﻞ‬
3 ‫ﺗﻤﺮﻳﻦ ﺷﻤﺎره‬
:‫در ﻃﺮاﺣﻲ ﺷﺮح داده ﺷﺪه در ﻛﻼس ﺑﻪ ﻃﺮاﺣﻲ زﻳﺮ ﺟﻬﺖ ﻧﻜﻬﺪاري اﻃﻼﻋﺎت ﻣﺮﺑﻮط ﺑﻪ ﻓﺮﻣﻬﺎي ﻳﻚ ﺳﺎزﻣﺎن رﺳﻴﺪﻳﻢ‬
:‫ آﻣﺪه اﺳﺖ‬SQL Server ‫ آن ﺑﺮاي ﺳﺎﺧﺖ آن در‬SQL ‫در زﻳﺮ ﻛﺪ‬
CREATE DATABASE [form] ON (NAME = N'form_Data', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL\data\form_Data.MDF' ,
SIZE = 2, FILEGROWTH = 10%) LOG ON (NAME = N'form_Log', FILENAME = N'C:\Program Files\Microsoft SQL
Server\MSSQL\data\form_Log.LDF' , SIZE = 1, FILEGROWTH = 10%)
COLLATE SQL_Latin1_General_CP1_CI_AS
GO
CREATE TABLE [dbo].[form] (
[formName] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[generationDate] [smalldatetime] NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[formInstance] (
[formInstanceSerialNo] [int] NOT NULL ,
[formName] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[formField] (
[fieldTitle] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[formName] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[formInstanceFieldValue] (
[formName] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[formInstanceSerialNo] [int] NOT NULL ,
[fieldTitle] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[fieldValue] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
GO
1
ALTER TABLE [dbo].[form] WITH NOCHECK ADD
CONSTRAINT [PK_form] PRIMARY KEY CLUSTERED
(
[formName]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[formInstance] WITH NOCHECK ADD
CONSTRAINT [PK_formInstance] PRIMARY KEY CLUSTERED
(
[formInstanceSerialNo],
[formName]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[formField] WITH NOCHECK ADD
CONSTRAINT [PK_formField] PRIMARY KEY CLUSTERED
(
[fieldTitle],
[formName]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[formInstanceFieldValue] WITH NOCHECK ADD
CONSTRAINT [PK_formFieldValue] PRIMARY KEY CLUSTERED
(
[formName],
[formInstanceSerialNo],
[fieldTitle]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[formInstance] ADD
CONSTRAINT [FK_formInstance_form] FOREIGN KEY
(
[formName]
) REFERENCES [dbo].[form] (
[formName]
)
GO
ALTER TABLE [dbo].[formField] ADD
CONSTRAINT [FK_formField_form] FOREIGN KEY
(
[formName]
) REFERENCES [dbo].[form] (
[formName]
)
GO
ALTER TABLE [dbo].[formInstanceFieldValue] ADD
CONSTRAINT [FK_formInstanceFieldValue_formField] FOREIGN KEY
(
[fieldTitle],
[formName]
) REFERENCES [dbo].[formField] (
[fieldTitle],
[formName]
),
CONSTRAINT [FK_formInstanceFieldValue_formInstance] FOREIGN KEY
(
[formInstanceSerialNo],
[formName]
) REFERENCES [dbo].[formInstance] (
[formInstanceSerialNo],
[formName]
)
GO
2
‫ﻫﻤﭽﻨﻴﻦ ﭘﺎره اي از داده ﻫﺎي ذﺧﻴﺮه ﺷﺪه در اﻳﻦ ﭘﺎﻳﮕﺎه را در ﺷﻜﻞ زﻳﺮ ﻣﻴﺒﻴﻨﻴﺪ‪:‬‬
‫در ﺷﻜﻞ زﻳﺮ ‪ query‬ﻣﺮﺑﻮط ﺑﻪ ‪FormInstance‬ﻫﺎﻳﻲ ﻛﻪ از ﻧﻮع ﻓﺮم ‪ StaffForm‬ﺑﻮده و ﺗﺎرﻳﺦ ﺗﻮﻟﺪ آﻧﻬﺎ از ’‪ ‘1980/01/01‬ﺑﺰرﮔﺘﺮ ﻣﻲ ﺑﺎﺷﺪ ﻧﺸﺎن داده ﺷﺪه اﺳﺖ‪:‬‬
‫‪ -1‬ﻳﻚ ﻓﺮم ﻃﺮاﺣﻲ ﻧﻤﻮده و دادﻫﺎي ﻣﺮﺑﻮط ﺑﻪ آن را ﺑﺎ ﺳﺎﺧﺘﺎر ﻓﻮق ﺗﺒﺪﻳﻞ ﻧﻤﻮده و ﻳﻚ ‪ query‬دﻟﺨﻮاه ﺑﻬﻤﺮاه ﻧﺘﻴﺠﻪ آن را ﺑﻨﻮﻳﺴﻴﺪ‪.‬‬
‫‪ -2‬ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ اﻳﻦ ﻃﺮاﺣﻲ ﻣﺰاﻳﺎ و اﻳﺮادات ﻣﺘﺼﻮر ﺑﺮاي اﻳﻦ ﻃﺮاﺣﻲ را ﻧﺎم ﺑﺒﺮﻳﺪ‪.‬‬
‫‪3‬‬
‫ ﻣﻲ ﺑﺎﺷﺪ‬40 ‫ و ﻛﻤﺘﺮ از‬20 ‫’ ﺑﻮده و ﺣﻘﻮق آﻧﻬﺎ ﺑﻴﺸﺘﺮ از‬1983/01/01’ ‫ﻫﺎﻳﻲ ﻛﻪ داراي ﺗﺎرﻳﺦ ﺗﻮﻟﺪ ﺑﺰرﮔﺘﺮ ﻟﺰ‬StaffForm ‫ ﺑﻨﻮﺳﻴﺪ ﻛﻪ‬query‫ ﻳﻚ‬-3
.‫را ﺑﺎزﮔﺮداﻧﺪ‬
name, ‫ را ﺑﺼﻮرت ﻳﻚ ﺟﺪول ﺑﺎ ﺳﺘﻮﻧﻬﺎي‬StaffForm ‫ ﺑﺮ روي‬Query ‫ ﺑﺮﻧﺎﻣﻪ ﻛﺎرﺑﺮدي ﻣﻴﺨﻮاﻫﻴﻢ ﻧﺘﻴﺠﻪ ﺣﺎﺻﻞ از‬UI ‫ در ﺻﻮرﺗﻴﻜﻪ ﺑﺮاي ﻣﺜﺎل در‬-4
‫ ﺑﺎ ﺳﺘﻮﻧﻬﺎي ﻓﻮق‬Relation ‫ زﻳﺮ را ﺑﮕﻮﻧﻪ اي ﺗﻐﻴﻴﺮ داد ﻛﻪ ﻧﺘﻴﺠﻪ آن ﻳﻚ‬query ‫ آﻳﺎ ﻣﻴﺘﻮان‬,‫ ﻧﺸﺎن دﻫﻴﻢ ﭼﻪ ﭘﻴﺸﻨﻬﺎدي دارﻳﺪ‬birth Date, Salary
‫ﺑﺎﺷﺪ؟‬
select
FormInstanceSerialNo,
FormName
From
FormInstanceFieldValue
Where
fieldTitle = 'birthDate' AND
fieldValue > '1980/01/01' AND
formName = 'staffForm'
‫ زﻳﺮ ﭼﻪ ﻧﺘﻴﺠﻪ اي ﻣﻴﺪﻫﺪ؟‬Query -5
select
formInstanceFieldValue.FieldTitle, FieldValue
from
formInstanceFieldValue,
(select distinct
FormName,
FormInstanceSerialNo,
FieldTitle
From
FormInstanceFieldValue a
Where
EXISTS(Select * From formInstanceFieldValue Where fieldTitle = 'birthDate' And fieldValue>'1980/01/02' AND
formName='StaffForm' AND formInstanceFieldValue.FormInstanceSerialNo=a.FormInstanceSerialNo) AND
EXISTS(Select * From formInstanceFieldValue Where fieldTitle = 'birthDate' And fieldValue<'1990/01/02' AND
formName='StaffForm' AND formInstanceFieldValue.FormInstanceSerialNo=a.FormInstanceSerialNo)or
EXISTS(Select * From formInstanceFieldValue Where fieldTitle = 'salary' And fieldValue>'4000' AND
formName='StaffForm' AND formInstanceFieldValue.FormInstanceSerialNo=a.FormInstanceSerialNo)
)result
Where
formInstanceFieldValue.FormName = result.FormName AND
formInstanceFieldValue.FormInstanceSerialNo = result.FormInstanceSerialNo AND
formInstanceFieldValue.FieldTitle = result.FieldTitle
SQL ‫ در ﺻﻮرت اﺳﺘﻔﺎده از‬.‫ﻫﺎي ﺧﻮد را روي آن اﺟﺮا ﻧﻤﺎﻳﻴﺪ‬Query ‫ﻫﺎ اﻳﺠﺎد ﻛﺮده و‬DBMS ‫ در ﺻﻮرت اﻣﻜﺎن اﻳﻦ ﺳﺎﺧﺘﺎر را در ﻳﻜﻲ از‬-6
.(‫ )ﺗﻤﺮﻳﻦ اﺧﺘﻴﺎري‬.‫ ﻣﻴﺘﻮاﻧﻴﺪ از ﻛﺪ ﻧﻮﺷﺘﻪ ﺷﺪه در ﺑﺎﻻ اﺳﺘﻔﺎده ﻧﻤﺎﻳﻴﺪ‬SERVER
4