powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / разрабтать БД под MS SQL Server 2000
20 сообщений из 20, страница 1 из 1
разрабтать БД под MS SQL Server 2000
    #35684052
Добрый день. Выполняю работу под MS SQL Server 2000. Довольно объемная задача - разработка базы данных для некой фирмы "Россинка". Полное задание звучит так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
1. Спроектировать базу данных для ведения бухгалтерско-складского учета фирмы "Росинка", занимающейся продажей воды и сопутствующих товаров.
2. Представить проект базы данных в виде структурной схемы.
3. Создать базу данных с помощью предложенной СУБД, используя командный процессор СУБД.
4. Представить созданный код на языке DDL и DCL.
5. Заполнить таблицы базы данных в соответствии с информацией, содержащейся в детализации.
6. Представить созданный код на языке DML.
7. Продемонстрировать работоспособность созданной базы данных, и то, что она отвечает всем рекомендациям, приведенным в детализации.


Д Е Т А Л И З А Ц И Я

На рынок водоснабжения населения города N выходит фирма "Росинка", предлагающая следующую продукцию:
- вода родниковая (в бутылях по 19 л) – 50 руб./бут.
- вода серебряная (в бутылях по 19 л) – 75 руб./бут.
- вода дистиллированная (в бутылях по 19 л) – 100 руб./бут.
- насос водяной помповый – 250 руб./шт.
- диспенсер для воды – 1000 руб./шт.
- кулер для воды – 3000 руб./шт.
Чтобы не потерять клиентов из-за возможности выполнения заказа ввиду отсутствия необходимого товара на складе решено, что сотрудники закупают реализуемую продукцию, как только количество единиц по указанной позиции станет меньше установленного уровня.
Этим уровнем было определено, что на складе должно всегда находиться не менее:
- 15 бутылок родниковой воды;
- 10 бутылок серебряной воды;
- 5 бутылок дистиллированной воды;
- 10 водяных помповых насосов;
- 5 диспенсеров для воды;
- 2 кулера для воды.
При достижении каким-либо пунктом указанного порогового уровня необходимо формировать заявку на закупку данного вида товара у оптовых поставщиков (формируется автоматически базой данных, необходимо предусмотреть информацию о том, чей заказ привел к формированию заявки). Эти заявки подлежат реализации, о чем должна быть сделана соответствующая запись (запись в числе прочего, должна содержать информацию о том, кто произвел закупку).
В виду ограниченности складского пространства было принято решение, что все закупки продукции должны производится таким образом, чтобы максимальное количество присутствующей на складе продукции было равно:
- 50 бутылок родниковой воды;
- 30 бутылок серебряной воды;
- 20 бутылок дистиллированной воды;
- 40 водяных помповых насосов;
- 15 диспенсеров для воды;
- 10 кулеров для воды.
Необходимо предусмотреть случаи, когда производится попытка продать товаров больше, чем имеется на складе. Сотруднику, осуществляющему продажу необходимо сообщить, что его заказ не может быть удовлетворен, поскольку на складе отсутствует необходимое количество продукции (база данных должна отслеживать и пресекать такие попытки автоматически). Недопустимы попытки продажи отрицательного или нулевого количества товаров.
Организация "Росинка" является молодой и поэтому в ней работают всего трое сотрудников:
- Иванов Петр Сидорович (оклад 3000 руб.)
- Петров Сидор Иванович (оклад 2600 руб.)
- Сидоров Иван Петрович (оклад 2200 руб.).
Заработок сотрудников является коммерческой тайной (поэтому сотрудник не должен видеть информацию о продажах других сотрудников, но должен иметь возможность просматривать информацию о своих продажах, количестве товара на складе, а также заявки на оптовую закупку дефицитного товара), и складывается из оклада и 5% премии с продаж. Каждый квартал сотрудникам начисляется премия в размере %% с заработной платы выплаченной за квартал (зарплаты и премии должны начисляться автоматически; эти функции должны быть реализованы с помощью сохраненных процедур).
Отчет компании должен содержать информацию о том, кто и на какую сумму продал за отчетный период, какой доход он при этом получил. Общий доход компании за отчетный период, расходы компании на заработную плату в отчетный период. Отчеты должны формироваться с помощью процедур с параметрами, указывающими начало и конец отчетного периода.[/FIXED]

в общем начал реализовывать, выделив 6 сущностей: поставщики, продукция, сотрудники, заказы, покупатели, заявки. В итоге создал 6 таблиц:
1) Поставщики  [code=plaintext]CREATE TABLE [dbo].[Suppliers] (
	[IDSupl] [int] IDENTITY ( 1 ,  1 ) NOT NULL ,
	[nameSupl] [nvarchar] ( 50 ) COLLATE Cyrillic_General_CI_AS NOT NULL ,
	[surName] [nvarchar] ( 50 ) COLLATE Cyrillic_General_CI_AS NULL ,
	[patronymic] [nvarchar] ( 50 ) COLLATE Cyrillic_General_CI_AS NULL 
) ON [PRIMARY]
2) продукция
Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE TABLE [dbo].[Produce] (
	[IDProd] [int] IDENTITY ( 1 ,  1 ) NOT NULL ,
	[nameProd] [nvarchar] ( 50 ) COLLATE Cyrillic_General_CI_AS NOT NULL ,
	[container] [nvarchar] ( 50 ) COLLATE Cyrillic_General_CI_AS NULL ,
	[minLevel] [int] NULL ,
	[maxLevel] [int] NULL 
) ON [PRIMARY]
3) сотрудники
Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE TABLE [dbo].[Employies] (
	[IDEmploy] [int] IDENTITY ( 1 ,  1 ) NOT NULL ,
	[nameEmploy] [nvarchar] ( 50 ) COLLATE Cyrillic_General_CI_AS NOT NULL ,
	[surnameEmploy] [nvarchar] ( 50 ) COLLATE Cyrillic_General_CI_AS NOT NULL ,
	[patronymicEmploy] [nvarchar] ( 50 ) COLLATE Cyrillic_General_CI_AS NULL ,
	[salary] [money] NULL 
) ON [PRIMARY]
4) заказы
Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE TABLE [dbo].[Orders] (
	[IDOrder] [int] IDENTITY ( 1 ,  1 ) NOT NULL ,
	[IDEmploy] [int] NULL ,
	[IDProd] [int] NULL ,
	[countProd] [int] NOT NULL ,
	[IDCust] [int] NOT NULL 
) ON [PRIMARY]
5) покупатели
Код: plaintext
1.
2.
3.
4.
5.
CREATE TABLE [dbo].[Customers] (
	[IDCust] [int] NOT NULL ,
	[nameCust] [nvarchar] ( 50 ) COLLATE Cyrillic_General_CI_AS NOT NULL ,
	[surnameCust] [nvarchar] ( 50 ) COLLATE Cyrillic_General_CI_AS NULL ,
	[patronymicCustq] [nvarchar] ( 50 ) COLLATE Cyrillic_General_CI_AS NULL 
) ON [PRIMARY]
6) заявки
Код: plaintext
1.
2.
3.
CREATE TABLE [dbo].[Claims] (
	[IDClaim] [int] IDENTITY ( 1 ,  1 ) NOT NULL ,
	[IDOrder] [int] NOT NULL 
) ON [PRIMARY]

построил диаграмму(в приложенном документе можно увидеть).
ВОПРОСЫ, КОТОРЫЕ У МЕНЯ ЕСТЬ И Я ПРОШУ У ВАС ПОМОЩИ:
1) как видно из ТЗ, товар находится в соот - щей таре, но тара также имеет небольшую конкретику, например, указано, что в бутыле вмещается 19 литров. А например насос просто измеряется в штуках, поэтому если добавлять еще одно поле в таблицу "Продукция", то оно будет заполнено не у всех видов тары. Что делать? В принципе можно оставить как есть, т к закупка и продажа отталкивается от единиц(а не оттого, сколько подединиц имеет каждая единица)
2) чтобы например произвести продажу товара будет вызван параметрический запрос, который попросит ввести сотрудника, покупателя, название нужного товара и его количество? из этого запроса будут вызываться другие подзапросы, делающие проверку на присутствие товара на складе и пр.?
3) вот этого не совсем понимаю:
При достижении каким-либо пунктом указанного порогового уровня необходимо формировать заявку на закупку данного вида товара у оптовых поставщиков (формируется автоматически базой данных, необходимо предусмотреть информацию о том, чей заказ привел к формированию заявки). Эти заявки подлежат реализации, о чем должна быть сделана соответствующая запись (запись в числе прочего, должна содержать информацию о том, кто произвел закупку).
т е мы пытаемся сделать запрос на покупку товара и если его не хватает, то автоматически формируется заявка, а заявка это тоже параметрический запрос,который требует ввести имя сотрудника, который заказывает товар и поставщика, который поставляет этот товар или по - другому что то нужно? Для этого имеютя таблицы "Claims" - заявки и "Supplyiers" - поставщики, но как их привязать к БД я не знаю точно? И как только заявка создана, она например кидается в таблицу "Claims" и количество продуктов в таблице "Produce" увеличивается на запрошенное количество(но при этом нужно проверять, чтобы она не превысила допустимый предел maxLevel)?Как это лучше сделать?
4) Заработок сотрудников является коммерческой тайной (поэтому сотрудник не должен видеть информацию о продажах других сотрудников, но должен иметь возможность просматривать информацию о своих продажах, количестве товара на складе, а также заявки на оптовую закупку дефицитного товара), и складывается из оклада и 5% премии с продаж.
т е нужно будет использовать представления или нужно по другому реализовывать?
5) Отчет компании должен содержать информацию о том, кто и на какую сумму продал за отчетный период, какой доход он при этом получил.
отчет - построить запрос или нужно использовать специальные средства MS SQL Server 2000?
ПОСМОТРИТЕ СТРУКТУРУ БД И ДАЙТЕ ПОЖАЛУЙСТА РЕКОМЕНДАЦИИ???
Вот полный скрипт БД:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'ROSINKA')
	DROP DATABASE [ROSINKA]
GO

CREATE DATABASE [ROSINKA]  ON (NAME = N'ROSINKA_Data', FILENAME = N'd:\Program Files\Microsoft SQL Server\MSSQL\data\ROSINKA_Data.MDF' , SIZE =  1 , FILEGROWTH =  10 %) LOG ON (NAME = N'ROSINKA_Log', FILENAME = N'd:\Program Files\Microsoft SQL Server\MSSQL\data\ROSINKA_Log.LDF' , SIZE =  1 , FILEGROWTH =  10 %)
 COLLATE Cyrillic_General_CI_AS
GO

exec sp_dboption N'ROSINKA', N'autoclose', N'false'
GO

exec sp_dboption N'ROSINKA', N'bulkcopy', N'false'
GO

exec sp_dboption N'ROSINKA', N'trunc. log', N'false'
GO

exec sp_dboption N'ROSINKA', N'torn page detection', N'true'
GO

exec sp_dboption N'ROSINKA', N'read only', N'false'
GO

exec sp_dboption N'ROSINKA', N'dbo use', N'false'
GO

exec sp_dboption N'ROSINKA', N'single', N'false'
GO

exec sp_dboption N'ROSINKA', N'autoshrink', N'false'
GO

exec sp_dboption N'ROSINKA', N'ANSI null default', N'false'
GO

exec sp_dboption N'ROSINKA', N'recursive triggers', N'false'
GO

exec sp_dboption N'ROSINKA', N'ANSI nulls', N'false'
GO

exec sp_dboption N'ROSINKA', N'concat null yields null', N'false'
GO

exec sp_dboption N'ROSINKA', N'cursor close on commit', N'false'
GO

exec sp_dboption N'ROSINKA', N'default to local cursor', N'false'
GO

exec sp_dboption N'ROSINKA', N'quoted identifier', N'false'
GO

exec sp_dboption N'ROSINKA', N'ANSI warnings', N'false'
GO

exec sp_dboption N'ROSINKA', N'auto create statistics', N'true'
GO

exec sp_dboption N'ROSINKA', N'auto update statistics', N'true'
GO

if( (@@microsoftversion / power( 2 ,  24 ) =  8 ) and (@@microsoftversion & 0xffff >=  724 ) )
	exec sp_dboption N'ROSINKA', N'db chaining', N'false'
GO

use [ROSINKA]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_Orders_Customers]') and OBJECTPROPERTY(id, N'IsForeignKey') =  1 )
ALTER TABLE [dbo].[Orders] DROP CONSTRAINT FK_Orders_Customers
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_Orders_Employies]') and OBJECTPROPERTY(id, N'IsForeignKey') =  1 )
ALTER TABLE [dbo].[Orders] DROP CONSTRAINT FK_Orders_Employies
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_Orders_Produce]') and OBJECTPROPERTY(id, N'IsForeignKey') =  1 )
ALTER TABLE [dbo].[Orders] DROP CONSTRAINT FK_Orders_Produce
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Claims]') and OBJECTPROPERTY(id, N'IsUserTable') =  1 )
drop table [dbo].[Claims]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Customers]') and OBJECTPROPERTY(id, N'IsUserTable') =  1 )
drop table [dbo].[Customers]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Employies]') and OBJECTPROPERTY(id, N'IsUserTable') =  1 )
drop table [dbo].[Employies]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Orders]') and OBJECTPROPERTY(id, N'IsUserTable') =  1 )
drop table [dbo].[Orders]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Produce]') and OBJECTPROPERTY(id, N'IsUserTable') =  1 )
drop table [dbo].[Produce]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Suppliers]') and OBJECTPROPERTY(id, N'IsUserTable') =  1 )
drop table [dbo].[Suppliers]
GO

exec sp_addsrvrolemember N'BUILTIN\Администраторы', sysadmin
GO

if not exists (select * from dbo.sysusers where name = N'guest' and hasdbaccess =  1 )
	EXEC sp_grantdbaccess N'guest'
GO

CREATE TABLE [dbo].[Claims] (
	[IDClaim] [int] IDENTITY ( 1 ,  1 ) NOT NULL ,
	[IDOrder] [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Customers] (
	[IDCust] [int] NOT NULL ,
	[nameCust] [nvarchar] ( 50 ) COLLATE Cyrillic_General_CI_AS NOT NULL ,
	[surnameCust] [nvarchar] ( 50 ) COLLATE Cyrillic_General_CI_AS NULL ,
	[patronymicCustq] [nvarchar] ( 50 ) COLLATE Cyrillic_General_CI_AS NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Employies] (
	[IDEmploy] [int] IDENTITY ( 1 ,  1 ) NOT NULL ,
	[nameEmploy] [nvarchar] ( 50 ) COLLATE Cyrillic_General_CI_AS NOT NULL ,
	[surnameEmploy] [nvarchar] ( 50 ) COLLATE Cyrillic_General_CI_AS NOT NULL ,
	[patronymicEmploy] [nvarchar] ( 50 ) COLLATE Cyrillic_General_CI_AS NULL ,
	[salary] [money] NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Orders] (
	[IDOrder] [int] IDENTITY ( 1 ,  1 ) NOT NULL ,
	[IDEmploy] [int] NULL ,
	[IDProd] [int] NULL ,
	[countProd] [int] NOT NULL ,
	[IDCust] [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Produce] (
	[IDProd] [int] IDENTITY ( 1 ,  1 ) NOT NULL ,
	[nameProd] [nvarchar] ( 50 ) COLLATE Cyrillic_General_CI_AS NOT NULL ,
	[container] [nvarchar] ( 50 ) COLLATE Cyrillic_General_CI_AS NULL ,
	[minLevel] [int] NULL ,
	[maxLevel] [int] NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Suppliers] (
	[IDSupl] [int] IDENTITY ( 1 ,  1 ) NOT NULL ,
	[nameSupl] [nvarchar] ( 50 ) COLLATE Cyrillic_General_CI_AS NOT NULL ,
	[surName] [nvarchar] ( 50 ) COLLATE Cyrillic_General_CI_AS NULL ,
	[patronymic] [nvarchar] ( 50 ) COLLATE Cyrillic_General_CI_AS NULL 
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Claims] WITH NOCHECK ADD 
	CONSTRAINT [PK_Claims] PRIMARY KEY  CLUSTERED 
	(
		[IDClaim]
	)  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[Customers] WITH NOCHECK ADD 
	CONSTRAINT [PK_Customers] PRIMARY KEY  CLUSTERED 
	(
		[IDCust]
	)  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[Employies] WITH NOCHECK ADD 
	CONSTRAINT [PK_Employies] PRIMARY KEY  CLUSTERED 
	(
		[IDEmploy]
	)  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[Orders] WITH NOCHECK ADD 
	CONSTRAINT [PK_Orders] PRIMARY KEY  CLUSTERED 
	(
		[IDOrder]
	)  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[Produce] WITH NOCHECK ADD 
	CONSTRAINT [PK_Produce] PRIMARY KEY  CLUSTERED 
	(
		[IDProd]
	)  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[Suppliers] WITH NOCHECK ADD 
	CONSTRAINT [PK_Suppliers] PRIMARY KEY  CLUSTERED 
	(
		[IDSupl]
	)  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[Orders] ADD 
	CONSTRAINT [FK_Orders_Customers] FOREIGN KEY 
	(
		[IDCust]
	) REFERENCES [dbo].[Customers] (
		[IDCust]
	) ON DELETE CASCADE  ON UPDATE CASCADE ,
	CONSTRAINT [FK_Orders_Employies] FOREIGN KEY 
	(
		[IDEmploy]
	) REFERENCES [dbo].[Employies] (
		[IDEmploy]
	) ON DELETE CASCADE  ON UPDATE CASCADE ,
	CONSTRAINT [FK_Orders_Produce] FOREIGN KEY 
	(
		[IDProd]
	) REFERENCES [dbo].[Produce] (
		[IDProd]
	) ON DELETE CASCADE  ON UPDATE CASCADE 
GO

...
Рейтинг: 0 / 0
разрабтать БД под MS SQL Server 2000
    #35684195
Q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q
Гость
Форум есть "Проектирование БД"
...
Рейтинг: 0 / 0
разрабтать БД под MS SQL Server 2000
    #35684206
я то обрадовался что кто то ответил :(
пускай туда(в нужную ветвь) перенесут. я знаю что на этом форуме очень высокий уровень у мемберов и думал, что быстро помогут, тем более задача не очень сложная имхо
...
Рейтинг: 0 / 0
разрабтать БД под MS SQL Server 2000
    #35684307
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это что, курсовик ? для курсовика сложновато. Я вот не понимаю, чего вы не понимаете, все вопросы какие-то общие и обширные.

я вот только про это могу что-то сказать:

автор
4) Заработок сотрудников является коммерческой тайной (поэтому сотрудник не должен видеть информацию о продажах других сотрудников, но должен иметь возможность просматривать информацию о своих продажах, количестве товара на складе, а также заявки на оптовую закупку дефицитного товара), и складывается из оклада и 5% премии с продаж.

т е нужно будет использовать представления или нужно по другому реализовывать?


либо view, либо процедуры, либо запрос написать так, чтобы один не видел данные другого.
Тут много вариантов есть, в зависимости от того, как вы это всё делать будете, с помощью каких
технологий. Например, если это будет JSP, то там и просто запрос можно написать.
А так --либо view, либо процедуры.

Модератор: Тема перенесена из форума "Разработка информационных систем".
...
Рейтинг: 0 / 0
разрабтать БД под MS SQL Server 2000
    #35684327
MasterZiv, вот от кого кого, а от вас ответ не думал нормальный получить(впрочем как и всегда). Помнится как то задал вопрос на С++, вы меня конкрентно "опустили", сказав что пора завязывать с программированием(может вы и правы были, но я не завязал).

MasterZivлибо запрос написать так, чтобы один не видел данные другого.
можно попробнее, например как?
вопрос 1 откинул, т к не влияет ни на что
остальные вопросы остались в силе? если кажется, что БД не конкретизирована предложите ваш более конкретный вариант?
спасибо
...
Рейтинг: 0 / 0
разрабтать БД под MS SQL Server 2000
    #35684425
edges7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разрабтка_БД_MS_SQL_2000
MasterZivлибо запрос написать так, чтобы один не видел данные другого.
можно попробнее, например как?

Ну, видимо, добавить в запрос условие.
...
Рейтинг: 0 / 0
разрабтать БД под MS SQL Server 2000
    #35684529
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробую помочь, хотя слишком обширная тема.
разрабтка_БД_MS_SQL_2000
3) вот этого не совсем понимаю: ...

Да в целом-то понятно, у вас должен быть триггер на таблице .... и вот тут становиться менее понятно, где у вас "склад"? Проще говоря, где будет храниться кол-во товаров, имеющихся в наличии? Если я што то пропустил, то "вешаете" триггер, который отслеживает кол-во товара на складе и если его меньше порогового, то делается запись в таблицу [Claims]. Вот только выбор поставщика из нескольких - это, имхо, должен решать человек. Поэтому, возможно надо предусмотреть в Claims хранение IDшников сразу нескольких поставщиков, а пользователь решает какого выбрать. Тут еще надо подумать.
разрабтка_БД_MS_SQL_20004) Заработок сотрудников является коммерческой тайной (поэтому сотрудник не должен видеть информацию о продажах других сотрудников, но должен иметь возможность просматривать информацию о своих продажах, количестве товара на складе, а также заявки на оптовую закупку дефицитного товара), и складывается из оклада и 5% премии с продаж. т е нужно будет использовать представления или нужно по другому реализовывать?Проблема решаема. Закрываете доступ к Orders (точнее не даете разрешений) обычным пользователям на просмотр таблицы Orders, только на вставку строк. Создаете ХП, которую наделяете соответствующими правами доступа (см. BOL на предмет синтаксиса CREATE PROC), в которой фильтруюте выходной набор в соответствии с бизнес-правилами. Не забывайте, начальник отдела должен видеть все, главбух может читать все из Orders.
...
Рейтинг: 0 / 0
разрабтать БД под MS SQL Server 2000
    #35684577
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разрабтка_БД_MS_SQL_2000 пишет:

> MasterZiv, вот от кого кого, а от вас ответ не думал нормальный
> получить(впрочем как и всегда). Помнится как то задал вопрос на С++, вы
> меня конкрентно "опустили", сказав что пора завязывать с
> программированием(может вы и правы были, но я не завязал).

Значит, упорный. Это хорошо, это в нашем деле очень нужно.

> можно попробнее, например как?

Ну, для этого надо в первую очередь построить систему регистрации
пользователей, чтобы иметь сущность пользователя, сохранять
документы в БД со ссылкой на пользователя и по нему фильтровать.

В примитивном случае, если предположить, что каждый сотрудник
работает в БД под собственным пользователем, будет что-то
типа

select *
from Employies e -- employees должно быть кажется.
where ....
and e.user_name = user_name()

Поле user_name надо естественно добавить в таблицу и
заполнять.

либо можно построить отдельно список пользователей,
их связь с сотрудниками, можно сделать также и
права в явном виде. Но это сложнее.

user_name() - функция, возвращяющая текущего
пользователя БД в MSSQL. Возможно, в современных
версиях она называется как-то по другому, или
существуют другие подобные функции. это надо
прочитать в доках.

> вопрос 1 откинул, т к не влияет ни на что
> остальные вопросы остались в силе? если кажется, что БД не
> конкретизирована предложите ваш более конкретный вариант?

я не знаю. Может поконкретней вопросы ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
разрабтать БД под MS SQL Server 2000
    #35684579
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно и на вставку закрывать, делать через процедуры или через VIEW с триггером instead.
...
Рейтинг: 0 / 0
разрабтать БД под MS SQL Server 2000
    #35684610
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,


Да не надо ему RLC делать, это ж задача для курсовика/диплома. Достаточно и вьюхи для Orders с предикатом
Код: plaintext
WHERE [Orders].[IDEmploy] = (select [IDEmploy] from [Employies] where [Employies].[username] = CURRENT_USER)
Ну и, конечно, добавить столбец username в Employies и занести логины пользователей.
...
Рейтинг: 0 / 0
разрабтать БД под MS SQL Server 2000
    #35686560
автори вот тут становиться менее понятно, где у вас "склад"?
"склад" нужн сразу спроектировать в таблицу продукции(Produce) и за это будет отвечать поле countCurrentProd, поэтому если пытаться продать товар(а это будет параметрический запрос с указанием количества товара), то можно будет проверить разницу countCurrentProd - количество_по_запросу и если разность будет не меньше допустимого(т е той константы, указанной в той же записи в поле minLevel), то можно продавать. Т е в Produce добавится еще одно поле, как вы указали "склад" - показывающее текущее количество каждого товара. Если количество товара запрашивается больше порогового, то необходимо записывать в таблицу Заявки(Claims) данные по закупке при этом вызывается параметрический запрос(или триггер, надеюсь триггер может иметь параметры) в котором нужно будет указать Фамилию(например или Имя, а может и то и другое) поставщика).

авторв Claims хранение IDшников сразу нескольких поставщиков, а пользователь решает какого выбрать. Тут еще надо подумать.
просто добавить в таблицу IDSupl и все. Каждый товар можно заказать только у одного поставщика в конкретный момент(т е если нужно 10 литро воды, то можно выбрать Иванов и все, в следующий раз можно будет выбрать Петрова например, но одновременно за раз у разных поставщиков покупать нельзя). Также не будет информации о наличии у поставщиков товара, будем считать что они имеют беграничное кол - во товаров и к каждому из них можно всегда обратиться по любому из товаров. Нормально так?

Но как тогда поступать: сделал заявку у Иванова(эти данные "упали" в таблицу заявок), т е считать, что якобы он их выдал и они автоматически переместились на склад, т е продажу можно провести. Т е получается в этом случае продажа всегда возможна, поскольку все необхимое будет докупать мгновенно или что то по мудрее придумать нужно?

авторНе забывайте, начальник отдела должен видеть все, главбух может читать все из Orders.
я как понял, что никаких начальников и главбухов нет. Имеется только 3 сотрудника. Т е нужно реализовать так, чтобы они входили в БД каждый под своим паролем(+ придумать начальника, иначе невозможно будет проверить работоспособность всей базы за раз, я правильно понимаю). Если вошли под начальником, то имеем доступ ко всем данным, если под одним из сотрудников, то осуществляем горизонтальную и вертикальную фильтрацию? Т е всего возможно 4 разных сотрудника?(4 придуманный нами получается как бы)?
Если есть свободное время ответьте на вопросы.
...
Рейтинг: 0 / 0
разрабтать БД под MS SQL Server 2000
    #35686569
еще по поводу формировния заявки: например нужно продать 40 бутылей воды(их всего 55 на текущий момент, но нижний порог 20(верхний пускай 200), т е не хватает минимум 5), мне нужно сразу формировать зявку(без формирования заказа) или сначала в любом случае заказ, а уже потом заявку(т е в таблице Clams будет поле, отвечающее за номер заказа, кстати сейчас так и сделал)?
...
Рейтинг: 0 / 0
разрабтать БД под MS SQL Server 2000
    #35686604
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разрабтка_БД_MS_SQL_2000автори вот тут становиться менее понятно, где у вас "склад"?
"склад" нужн сразу спроектировать в таблицу продукции(Produce) и за это будет отвечать поле countCurrentProd, поэтому если пытаться продать товар(а это будет параметрический запрос с указанием количества товара), то можно будет проверить разницу countCurrentProd - количество_по_запросу и если разность будет не меньше допустимого(т е той константы, указанной в той же записи в поле minLevel), то можно продавать. Т е в Produce добавится еще одно поле, как вы указали "склад" - показывающее текущее количество каждого товара. Если количество товара запрашивается больше порогового, то необходимо записывать в таблицу Заявки(Claims) данные по закупке при этом вызывается параметрический запрос(или триггер, надеюсь триггер может иметь параметры) в котором нужно будет указать Фамилию(например или Имя, а может и то и другое) поставщика).Ну что же, можно склад организовать и таким способом. Но на будущее, обычно ведется учет каждой партии товара поступающего на склад. Не понял про какие "параметрические запросы" и "триггеры с параметрами" речь, но в любой СУБД в триггер поступает информация об измененных записях. В MSSQL вам подойдет триггер типа FOR UPDATE. И не забудьте наложить констрейнт на поле countCurrentProd с запретом отрицательных значений. Кстати, это поле я бы лично назвал по-привычке QTY.
авторпросто добавить в таблицу IDSupl и все. Каждый товар можно заказать только у одного поставщика в конкретный момент(т е если нужно 10 литро воды, то можно выбрать Иванов и все, в следующий раз можно будет выбрать Петрова например, но одновременно за раз у разных поставщиков покупать нельзя). Также не будет информации о наличии у поставщиков товара, будем считать что они имеют беграничное кол - во товаров и к каждому из них можно всегда обратиться по любому из товаров. Нормально так? Не все так просто. Между товарами и поставщиками отношение один-ко-многим и встает вопрос выбора поставщика. Как сделать выбор, решать вам. Но в любом случае, такие вещи решаются пользователем. Поэтому однозначно - сначала заявка (автоматически, на триггере), заявка рассматривается и утверждается на стороне клиента (ручками), корректируется и объем поставки и делается запись в таблицу Orders. В таблицу Claims следует добавить поле IDProd, а OrderID сделал бы NULLABLE'ивым и заносить в нее данные только после оформления заявки как способ отделения от оформленных заявок от требующих рассмотрения. Это лучше делать в ХП.
...
Рейтинг: 0 / 0
разрабтать БД под MS SQL Server 2000
    #35686618
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разрабтка_БД_MS_SQL_2000мне нужно сразу формировать зявку(без формирования заказа) или сначала в любом случае заказ, а уже потом заявку(т е в таблице Clams будет поле, отвечающее за номер заказа, кстати сейчас так и сделал)? Возможно номер заказа вообще не надо хранить. Хранить надо: PK (суррогатный), дату внесения заявки, ID товара. При оформлении заказа на товар, соответствующую заявку надо удалить. Удобно в хранимой процедуре.
...
Рейтинг: 0 / 0
разрабтать БД под MS SQL Server 2000
    #35686623
авторзаявка рассматривается и утверждается на стороне клиента (ручками), корректируется и объем поставки и делается запись в таблицу Orders.
дело в том, что интерфейса никого не предполагается! будет запущен только анализатор запросов и все.

что касается разграничение прав доступа наверное буду использовать create user, sp_addlogin, sp_adduser. Роли / группы не потребуются скорее всего, поскольку мало пользователей(всего 4, а не 1000 - чи), это ведь логично?
...
Рейтинг: 0 / 0
разрабтать БД под MS SQL Server 2000
    #35686644
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разрабтка_БД_MS_SQL_2000авторзаявка рассматривается и утверждается на стороне клиента (ручками), корректируется и объем поставки и делается запись в таблицу Orders.
дело в том, что интерфейса никого не предполагается! будет запущен только анализатор запросов и все.

что касается разграничение прав доступа наверное буду использовать create user, sp_addlogin, sp_adduser. Роли / группы не потребуются скорее всего, поскольку мало пользователей(всего 4, а не 1000 - чи), это ведь логично?Без интерфейса база мертва! Фигня какая-то получается ...
С пользователями можно и так.
...
Рейтинг: 0 / 0
разрабтать БД под MS SQL Server 2000
    #35686646
авторБез интерфейса база мертва! Фигня какая-то получается ...
С пользователями можно и так.
вот поэтому я и говорил о параметрических триггерах. про интерфейс интересовался, оказалось что не нужно(если потом потребуется доделаю, например на дельфи), а пока только работать через query analyzer. Думаю все равно можно будет сделать, даже без интерфейса? сейчас немного перепроектирую БД и еще раз покажу диаграмму.
...
Рейтинг: 0 / 0
разрабтать БД под MS SQL Server 2000
    #35686647
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разрабтка_БД_MS_SQL_2000что касается разграничение прав доступа наверное буду использовать create user, sp_addlogin, sp_adduser. Роли / группы не потребуются скорее всего, поскольку мало пользователей(всего 4, а не 1000 - чи), это ведь логично?что касается разграничение прав доступа: логины сотрудников следует хранить в таблице Employies. Для выборки из Orders использовать ХП, выполняемую от имени ... ну, например, админа. В ней проверить кто запустил ХП и в соответствии с логином отфильтровать заказы определенного сотрудника.
...
Рейтинг: 0 / 0
разрабтать БД под MS SQL Server 2000
    #35686650
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разрабтка_БД_MS_SQL_2000вот поэтому я и говорил о параметрических триггерах. про интерфейс интересовался, оказалось что не нужно(если потом потребуется доделаю, например на дельфи), а пока только работать через query analyzer. Это все можно сделать через вызовы ХП. В смысле имитировать действия пользователей и тот самый пользовательский интерфейс.
...
Рейтинг: 0 / 0
разрабтать БД под MS SQL Server 2000
    #35686666
авторЭто все можно сделать через вызовы ХП. В смысле имитировать действия пользователей и тот самый пользовательский интерфейс.
я думаю аналогично, т е получится запуск ХП, затем отработает какой нибудь триггер на обновление или вставку, в свою очередь вызыващий другую ХП, а она что нибудь еще и пр., т е будет логика зашита на Transact - SQL. спасибо Senya_L, что подсказываете, без вас, не справился бы. Вы заглядывайте иногда в эту тему когда у вас время будет свободное, так сказать ведите меня(подсказывайте при возможности). попробую еще выяснить, точно ли интерфейс не требуется к этой задаче.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / разрабтать БД под MS SQL Server 2000
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]