Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/140: Рейтинг темы: голосов - 140, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 03.05.2018
Сообщений: 7

База данных магазина

03.05.2018, 21:23. Показов 28079. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я новичок, не шарю. Задали сделать курсач по базам данных, на SQL (делаю на SQL 2012) . Тема курсового "магазин с одним продавцом . Компьютер вместо кассового аппарата . База наличия товаров ; наименование , единица измерения , цена еденицы , количевство , дата последнего завоза . Регистрация поступления товара ( как старых , так и новых наименований ). Оформление покупки : выписка чека , корректировка база . Проблема уценки и списания . И инвентаризация остататков товара с вычислением суммарной стоимости . "
вот есть такая база данных

magazin_.7zнадо создать триггеры, чтобы товар автоматически удалялся или отнимался от текущего количества на складе при оформлении на него покупки. А я не знаю как...
Если вдруг не правильно создал базу данных и есть вариант по проще, то поделитесь пожалуйста. Спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.05.2018, 21:23
Ответы с готовыми решениями:

База данных интернет-магазина
Всем привет,нужна помощь!Нужно создать Бд на mysql для интернет-магазина строительных материалов,задали на курсач.Задача есть несколько...

База данных Магазина (Подредактировать)
Помогите пожалуйста в этой БД реализовать связи:Один-к-одному,Один-ко-многим,Многие-ко-многим.

SQL База Данных для интернет магазина
Вот пример БД ) правильно ли я делаю Получается что в Таблице Категории некоторые поля должны быть пустыми ) иначе при Заказе закажется...

16
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
04.05.2018, 10:45
T-SQL
1
2
3
4
5
6
7
8
9
10
CREATE TRIGGER ОформлениеПокупки 
ON ТаблицаКудаОформляетсяПокупка
FOR INSERT
BEGIN
declare @buyQuantity int
declare @itemID int
SET @itemID = (SELECT ИДКупленногоТовара FROM INSERTED)
SET @buyQuantity = (SELECT КоличествоКупленногоТовара FROM INSERTED)
UPDATE Склад SET КоличествоТовара = КоличествоТовара - @buyQuantity WHERE ID = @itemID
END
1
04.05.2018, 16:53

Не по теме:

База Данных Автовокзал в этой теме текст вопроса одинаковый, только имя бд и отличается. Почему один и тот же вопрос задавался с разных ников?:scratch:

0
0 / 0 / 0
Регистрация: 03.05.2018
Сообщений: 7
04.05.2018, 18:47  [ТС]
Может однопоточник , препод скорее всего непарился и примерно похожее всем дал . Специальность инженер - электроник . Дали курсовой по бд .
Кое как что-то понял , тут встал в ступор с триггером . Уже думал как создать через хранимые процедуры .
0
04.05.2018, 19:40

Не по теме:


а вот обманывать нехорошо.

0
0 / 0 / 0
Регистрация: 03.05.2018
Сообщений: 7
04.05.2018, 21:12  [ТС]
сори но что-то , пошло не так .

если кто истолкует в чем причина . заранее спасибо .
0
0 / 0 / 0
Регистрация: 03.05.2018
Сообщений: 7
04.05.2018, 22:55  [ТС]
в итоге подправил чуток , изначальный .
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
go
CREATE TRIGGER ОформлениеПокупки
ON [dbo].[Pokupka]
FOR INSERT
AS
BEGIN 
declare @buyQuantity int
declare @itemID int 
SET @itemID = (SELECT [id_pokupka] FROM INSERTED)
SET @buyQuantity = (SELECT [id_Tovar] FROM INSERTED)
UPDATE [dbo].[Tovar] SET [Kolichestvo] = [Kolichestvo] - @buyQuantity WHERE [id_Tovar]= @itemID
END
и в итоге

может бд не правильно создал ?
0
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
06.05.2018, 19:25
Rengler, ты своим запросом вносишь данные в таблицу Pokupka, в которой нет поля id_Tovar. Я бы рекомендовал в таблицу Pokupka добавить поле с количеством и использовать такой запрос:
SQL
1
SET @buyQuantity = (SELECT [Количество] FROM INSERTED)
Ну и, соответственно, тебе нужно еще и сумму покупки посчитать, если, конечно, ты ее не вводишь вручную, примерно таким образом:
SQL
1
2
3
DECLARE @SUM money
SET @itemID= (SELECT itemID FROM inserted)
SET @SUM = (SELECT Tsena_edinitsy FROM Tovar WHERE id_Tovar = @itemID)
Однако для этого тебе нужно в таблицу с покупками добавить соответствующие поля и желательно бы связать таблицу с покупками и товарами по полю itemID - id_Tovar

Добавлено через 2 минуты
И еще один совет: называть таблицы и поля лучше по-английски. Транслит глаза режет )
0
0 / 0 / 0
Регистрация: 03.05.2018
Сообщений: 7
06.05.2018, 21:17  [ТС]
В общем прошу помочь , опыт работы с SQL 2 ночи , профиль учебы тоже очень долек , но увы дали курсовой на бд . Я начитавшись сылок в гугле и покурив сайт майков + форум .
В итоге переделал с нуля . ( может новую тему создать лучше ?)
magazin1.7z
Триггеры,ограничения , диаграмма


Код бд на T-SQL ,делал в ssms2012
T-SQL
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
223
224
225
226
227
  
--create database magazin.net
 
use [magazin.net]
go
 
create table [customers]
(
[ID] INT NOT NULL IDENTITY ,
[FName] nvarchar(20) null,
[MName] nvarchar(20) null,
[LName] nvarchar(20) null,
[address] nvarchar(50) null,
[Citu] nvarchar(20) null,
[Phone] nvarchar(12) null,
[DateInSystem] date DEFAULT GETDATE() 
) 
 
create table [products]
(
[ID] INT NOT NULL IDENTITY ,
[Name] nvarchar(50) not null ,
 
) 
 
create table [products_details]
(
[ID] INT NOT NULL,
[tupe] varchar(20) ,
[Naimenovanie] varchar(100) not null,
[description] varchar(500) not null,
[data_zavoza] date not null
)
 
create table [stock]
(
[ProductID] INT NOT NULL,
[Qtu] int DEFAULT 0 ,
[Name_Edinitsy] varchar(30) not null,
[prise] money NOT NULL ,
[total_prise] AS CONVERT ( money, Qtu*prise)
)
 
create table [order]
(
[ID] INT NOT NULL IDENTITY ,
[customersID] INT NULL ,
[OrderDate] date DEFAULT GETDATE() 
) 
 
create table [order_details]
(
[orderID] INT NOT NULL  ,
[line_item] INT NOT NULL ,
[ProductID] INT NULL ,
[Qtu] int NOT NULL,
[prise] money NOT NULL ,
[total_prise] AS CONVERT ( money, Qtu*prise)
) 
 
--КЛЮЧИ
ALTER TABLE [dbo].[customers]
ADD
PRIMARY KEY (ID)
go
 
ALTER TABLE [dbo].[products]
ADD
PRIMARY KEY (ID)
go
 
 
ALTER TABLE [dbo].[products_details]
ADD
UNIQUE(ID)
go
 
ALTER TABLE [dbo].[products_details]
ADD
   FOREIGN KEY (ID) REFERENCES [dbo].[products](ID)
     ON DELETE CASCADE 
go
 
ALTER TABLE [dbo].[stock]
ADD
UNIQUE([ProductID])
go
 
ALTER TABLE [dbo].[stock]
ADD
   FOREIGN KEY ([ProductID]) REFERENCES [dbo].[products](ID)
     ON DELETE CASCADE 
go
 
ALTER TABLE [dbo].[order]
ADD
PRIMARY KEY (ID)
go
 
ALTER TABLE [dbo].[order]
ADD
   FOREIGN KEY ([customersID]) REFERENCES [dbo].[customers](ID)
     ON DELETE SET NULL
go
 
ALTER TABLE [dbo].[order_details]
ADD
PRIMARY KEY ([orderID],[line_item])
go
 
 
ALTER TABLE [dbo].[order_details]
ADD
   FOREIGN KEY ([orderID]) REFERENCES [dbo].[order](ID)
                                                            --НЕТ УДАЛЕНИЯ ЗКАЗА 
go
 
ALTER TABLE [dbo].[order_details]
ADD
   FOREIGN KEY ([ProductID]) REFERENCES [dbo].[products](ID)
     ON DELETE SET NULL
go
 
--ПОЛЬЗОВАТЕЛЬСКИЕ ОГРАНИЧЕНИЯ 
 
ALTER TABLE [dbo].[customers]
ADD
CHECK  ([Phone] LIKE '([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])') 
GO
 
ALTER TABLE [dbo].[order]
ADD
CHECK  ([OrderDate] >= DATEADD(DAY ,- 900, GETDATE()) AND [OrderDate] <= GETDATE())
GO
 
ALTER TABLE [dbo].[stock]
ADD
CHECK  ([Name_Edinitsy] IN ('л','м','кг','шт','ед'))
GO
 
ALTER TABLE [dbo].[customers]
ADD
CHECK  ([DateInSystem] >= DATEADD(DAY ,- 900, GETDATE()) AND [DateInSystem] <= GETDATE())
GO
 
ALTER TABLE [dbo].[stock]
ADD
CHECK  ([Qtu] >=0 )
GO
 
 
--ТРИГГЕРЫ  
 
CREATE TRIGGER уменьшение_склада_при_заказе   
ON [dbo].[order_details]
FOR INSERT
AS
  IF @@ROWCOUNT = 0 
      RETURN 
      SET NOCOUNT ON 
 
UPDATE [dbo].[stock]
SET Qtu = s.Qtu - i.Qtu
FROM [dbo].[stock] s JOIN 
(SELECT [ProductID], SUM (Qtu) Qtu FROM inserted  GROUP BY [ProductID] ) i 
ON s.[ProductID] = i.[ProductID]
go
 
 
CREATE TRIGGER увеличение_склада_при_заказе   
ON [dbo].[order_details]
FOR DELETE
AS
  IF @@ROWCOUNT = 0 
      RETURN 
      SET NOCOUNT ON 
 
UPDATE [dbo].[stock]
SET Qtu = s.Qtu + d.Qtu
FROM [dbo].[stock] s JOIN 
(SELECT [ProductID], SUM (Qtu) Qtu FROM deleted  GROUP BY [ProductID] ) d 
ON s.[ProductID] = d.[ProductID]
go
 
 
CREATE TRIGGER изменение_заказа_и_склада   
ON [dbo].[order_details]
FOR UPDATE
AS
  IF @@ROWCOUNT = 0 
      RETURN 
  IF NOT UPDATE (Qtu) 
      RETURN
      SET NOCOUNT ON 
 
UPDATE [dbo].[stock]
SET Qtu = s.Qtu - (i.Qtu - d.Qtu)
FROM [dbo].[stock] s JOIN 
(SELECT [ProductID], SUM (Qtu) Qtu FROM deleted  GROUP BY [ProductID] ) d 
ON s.[ProductID] = d.[ProductID]
JOIN 
(SELECT [ProductID], SUM (Qtu) Qtu FROM inserted  GROUP BY [ProductID] ) i 
ON s.[ProductID] = i.[ProductID]
go
 
 
CREATE TRIGGER вз_удал_тавара_при_ост0_и_нет_в_заказах
ON [dbo].[products]
INSTEAD OF DELETE
AS
  IF @@ROWCOUNT = 0 
      RETURN 
      SET NOCOUNT ON 
  IF EXISTS (SELECT 1 FROM [dbo].[order_details] od
                      JOIN deleted d
                      ON od.ProductID = d.ID)
      RAISERROR ('Тавар не может быть удален т.к состоит в заказах', 10,1)
 
  ELSE IF EXISTS (SELECT 1 FROM [dbo].[stock] s
                      JOIN deleted d
                      ON s.ProductID = d.ID
                      WHERE s.Qtu <> 0 )
      RAISERROR ('Тавар не может быть удален т.к есть остаток на складе ', 10,2)
  ELSE 
      DELETE [dbo].[products] WHERE ID IN (SELECT ID FROM deleted)
 
go

Тема курсового
"магазин с одним продавцом . Компьютер вместо кассового аппарата . База наличия товаров ; наименование , единица измерения , цена еденицы , количевство , дата последнего завоза . Регистрация поступления товара ( как старых , так и новых наименований ). Оформление покупки : выписка чека , корректировка база . Проблема уценки и списания . И инвентаризация остататков товара с вычислением суммарной стоимости . "

Прошу помочь .
Насколько правильно составлена ?
Есть-ли критические ошибки ?
Насколько работоспособна ?(требуется всего ничего главное чтоб хоть 1 транзакцию/операцию совершила , увы таковы реалии )
Если есть какой-то материал/методички бросте ссылку пж.
Заранее спасибо !
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
06.05.2018, 21:53
Цитата Сообщение от Rengler Посмотреть сообщение
Насколько правильно составлена ?
Есть-ли критические ошибки ?
Учитывая непрофильность предмета, можно считать, что правильно и критических ошибок нет.
0
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
07.05.2018, 15:03
Цитата Сообщение от Rengler Посмотреть сообщение
Насколько работоспособна ?(требуется всего ничего главное чтоб хоть 1 транзакцию/операцию совершила , увы таковы реалии )
Я тебе полностью написал работу триггера, отвечающего за покупку и уменьшение товара на складе )
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
07.05.2018, 15:31
Цитата Сообщение от DenKG Посмотреть сообщение
Я тебе полностью написал работу триггера, отвечающего за покупку и уменьшение товара на складе )
А ничего, что этот триггер в принципе неверный?
0
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
07.05.2018, 15:59
invm, почему это?
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
07.05.2018, 16:35
DenKG, потому что в таблицах inserted/deleted может быть более одной строки.
0
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
07.05.2018, 16:42
invm, ну не думаю, что в данной задаче потребуется использование курсоров и т.д.
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
07.05.2018, 16:50
DenKG, вот-вот, думать нынче не модно...
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
07.05.2018, 17:07
Цитата Сообщение от DenKG Посмотреть сообщение
ну не думаю, что в данной задаче потребуется использование курсоров и т.д.
каким боком тут курсоры, если ты пытаешься запихнуть в скалярное значение 100500 значений?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.05.2018, 17:07
Помогаю со студенческими работами здесь

База Данных магазина
народ помогите пожалуйста Есть база данных, написанная в делфи: | дата | день недели | фамилия | выручка | помогите организовать...

База данных магазина
здравствуйте, мне срочно нужна курсовая работа на тему база данных магазина....

база данных парфюмерного магазина
помогите с курсовой::cry:

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

База данных для магазина
Если кому нужна готовая рабочая база для организации учета торговли в магазине одежды - пишите vit_lub@mail.ru


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru