Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787

Как хранить данные в таблице «заказ?

18.10.2018, 14:18. Показов 1714. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Подскажите пожалуйста.
Есть база, в ней таблицы Заказ, замки, накладки.
В таблицах замки и накладки хранятся id, наименование и цена.
В таблице Заказ хранятся заказы, я думаю это понятно. Столбцы в нем такие: Номер заказа, Замок, Накладка.
Вопрос: Как хранить данные в таблице заказ? Хранить id Замков и id накладок или же наименования замков и накладок?
Использую Sql Express, в будущем предполагаю, что будет очень много заказов и база заполнится, т.к. вроде SQL Express база ограничена а размере. И предполагаю чистить базу периодически, при этом экспортировать в Excel. Но если в базе буду хранить id замков и накладок, то при экспорте у меня будут цифры а не наименования.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.10.2018, 14:18
Ответы с готовыми решениями:

Как лучше хранить данные в таблице для блога?
Здравствуйте. Подскажите пожалуйста как лучше поступить: Есть таблица для хранения новостей блога. Вопрос заключается в том, как...

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

Как хранить список слов в таблице?
Всем привет. Предположим, что при создании темы пользователь может указать, какие игры у него есть на аккаунте, которые он будет вводить...

15
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
18.10.2018, 14:31
ответ на ваш вопрос
Цитата Сообщение от MaksimkaI Посмотреть сообщение
Хранить id Замков и id накладок
А вообще неправильно, когда у вас понадобиться 3 накладки и два замка, как вы вашем случае действовать будете?
Тут по хорошему надо делать таблицы
ТаблицаПоляПредназначение
ТипId, Наименование и т.п.Для хранения типов (накладки, замки и т.д.)
ТоварыId,IdТип,Name и т.п.хранение данных о товарах
ПрайсId,IdТовары, DateInput и т.п.Хранение сведений о ценах на товары
ЗаказыId, Дата заказа и т.п.Фактически договор который объединяет заказ
КомплектыId,IdЗаказы,IdТовары, колличество и т.п.Фактически таблица фактов, где вы комплектуете ваши заказы.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,846
Записей в блоге: 1
18.10.2018, 15:20
Цитата Сообщение от MaksimkaI Посмотреть сообщение
Вопрос: Как хранить данные в таблице заказ? Хранить id Замков и id накладок или же наименования замков и накладок?
С точки зрения реляцинной модели правильнее хранить id и получать название и цену из родительской таблицы. Однако после того как заказ размещен лучше хранить название и цену в таблице Заказы чтобы изменения цены или названия не влияли на прошлые заказы. Также можно использовать комбинированную схему. Пока заказ не подтвержден используем id, после подтверждения используем данные из таблицы Заказы. То есть ее структура может быть примерно такой (за основу взято предложение V_Monomax о структуре таблиц).
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE Заказы
(
    Id_Заказа INT IDENTITY(1,1) PRIMARY KEY,
    ДатаРазмещения datetime NOT NULL
)
CREATE TABLE Заказы_Содержимое
(
    Id INT IDENTITY(1,1) PRIMARY KEY,
    Id_Заказа INT NOT NULL FOREIGN KEY (Заказы.Id_Заказа),
    Id_Товара INT NULL FOREIGN KEY (Товары.Id_Товара),
    Название_Товара VARCHAR(100) NULL,
    Цена_Товара money NULL,
    Количество INT NOT NULL
)
Чтобы не смешивать разные сущности, можно разделить неподтвержденные и подтвержденные заказы на отдельные таблицы. Нужно смотреть по своей ситуации.

Добавлено через 1 минуту
Цитата Сообщение от MaksimkaI Посмотреть сообщение
Но если в базе буду хранить id замков и накладок, то при экспорте у меня будут цифры а не наименования.
Можно написать View который будет делать JOIN-ы и возвращать данные в читабельном виде для экспорта.

Добавлено через 2 минуты
Цитата Сообщение от MaksimkaI Посмотреть сообщение
т.к. вроде SQL Express база ограничена а размере
10 Гб. Посмотри размер вашего прайс-листа и количество заказов в месяц. Далее создай пробную БД, заполни её данными и посмотри объем БД. После этого уже начинай беспокоится об ограничениях.
1
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
18.10.2018, 15:24
OwenGlendower, я в своем предложении набора таблиц благодаря вам увидел косячок:
Цитата Сообщение от V_Monomax Посмотреть сообщение
Комплекты Id,IdЗаказы,IdТовары, количество и т.п. Фактически таблица фактов, где вы комплектуете ваши заказы.
Правильнее
Комплекты Id,IdЗаказы,IdПрайс, количество и т.п. Фактически таблица фактов, где вы комплектуете ваши заказы.
Тогда заказы не будут зависеть от текущей цены на товары, и цена будет калькулироваться по комплектам.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,846
Записей в блоге: 1
18.10.2018, 15:41
Цитата Сообщение от V_Monomax Посмотреть сообщение
Тогда заказы не будут зависеть от текущей цены на товары, и цена будет калькулироваться по комплектам.
Не понял каким образом замена IdТовары на IdПрайс позволит заказу не зависеть от текущей цена если она все еще хранится в таблице Прайс. Видимо чего-то еще в схеме не хватает?
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
18.10.2018, 15:46
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Не понял каким образом замена IdТовары на IdПрайс позволит заказу не зависеть от текущей цена если она все еще хранится в таблице Прайс. Видимо чего-то еще в схеме не хватает?
по моей задумке именно в прайсе набивается цена, и устанавливается продолжительность действия цены (т.е. Прайс Это тоже фактически таблица фактов, выступающая для комплектов справочником), иначе вообще в таблице прайс нет смысла, а тут все сохраняется, а отбор текущих действующих товаров, идет по признаку даты, либо вообще по галочке активно. Тут ведь проблема в том что, я только предлагаю, а не реализую данную задачу, я показал как сделал бы я.
0
 Аватар для Salim_Destroyer
20 / 11 / 4
Регистрация: 20.05.2016
Сообщений: 84
18.10.2018, 15:51
Цитата Сообщение от MaksimkaI Посмотреть сообщение
И предполагаю чистить базу периодически, при этом экспортировать в Excel.
Научитесь работать с OLE объектами и можете создать Button и при Click он будет все, что у вас накопилось в файл Excel скидывать. Или же вот использовать библиотеку ExcelLibrary/, она бесплатная можете скачать и юзать. Простой пример создание файла Excel и заполнения его.
C#
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
//Создаем dataset и table
DataSet ds = new DataSet("New_DataSet");
DataTable dt = new DataTable("New_DataTable");
 
//Устанавливаем свою локализацию для каждого
ds.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
dt.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
 
//Создаем подключение к БД и открываем его.
OleDbConnection con = new OleDbConnection(dbConnectionString);
con.Open();
 
//Создаем запрос и заполняем наш table
string sql = "SELECT Whatever FROM MyDBTable;";
OleDbCommand cmd = new OleDbCommand(sql, con);
OleDbDataAdapter adptr = new OleDbDataAdapter();
 
adptr.SelectCommand = cmd;
adptr.Fill(dt);
con.Close();
 
//Добавляем наш table в dataset
ds.Tables.Add(dt);
 
//Создаем файл Excel и в лист1 заливаем на dataset.
ExcelLibrary.DataSetHelper.CreateWorkbook("MyExcelFile.xls", ds);
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
18.10.2018, 15:59
Цитата Сообщение от Salim_Destroyer Посмотреть сообщение
Научитесь работать с OLE объектами и можете создать Button и при Click он будет все, что у вас накопилось в файл Excel скидывать.
Крайне иррациональное предложение во первых
Цитата Сообщение от Salim_Destroyer Посмотреть сообщение
можете создать Button и при Click он будет все, что у вас накопилось в файл Excel скидывать.
вообще плохо.
Я ярый сторонник SOLID, а вы предлагаете, то с чем борется SOLID.
Ну и потом использовать
Цитата Сообщение от Salim_Destroyer Посмотреть сообщение
Excel
для хранения большего объема работающих данных, это плохой тон. Да и крайне неудобно при наличии клинет-серверной архитектуры.
1
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
18.10.2018, 16:59  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Однако после того как заказ размещен лучше хранить название и цену в таблице Заказы чтобы изменения цены или названия не влияли на прошлые заказы
А вот об этом я даже не догадывался. Более склоняюсь тогда к хранению наименований. То есть в принцыпе, если я буду хранить сами наименования это ведь не страшно?
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
18.10.2018, 17:12
Цитата Сообщение от MaksimkaI Посмотреть сообщение
если я буду хранить сами наименования это ведь не страшно?
не страшно, но можно получить неудобство на выходе: размеры БД, будут увеличиваться быстрее чем при работе с идентификаторами, вопрос, только в том устроит ли вас такой подход (из моей практики, на заполнение 10 ГБ, при очень активном использовании, вам понадобится не менее года, в приведенном примере с приведенной структурой, вам понадобится лет 5, а то и более).
0
 Аватар для Salim_Destroyer
20 / 11 / 4
Регистрация: 20.05.2016
Сообщений: 84
18.10.2018, 17:47
Цитата Сообщение от V_Monomax Посмотреть сообщение
Я ярый сторонник SOLID, а вы предлагаете, то с чем борется SOLID.
Ну и потом использовать
если вы про принципов объектно-ориентированного программирования, то совсем вас не пойму, не думаю, что это crud приложение будет уж таким огромным, чтобы создать классы, интерфейсы, разделения зависимостей и т.п. То что хочет автор можно и в самом Excel с помощью VBA сделать.
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
19.10.2018, 08:48  [ТС]
Цитата Сообщение от V_Monomax Посмотреть сообщение
не страшно, но можно получить неудобство на выходе: размеры БД, будут увеличиваться быстрее чем при работе с идентификаторами, вопрос, только в том устроит ли вас такой подход (из моей практики, на заполнение 10 ГБ, при очень активном использовании, вам понадобится не менее года, в приведенном примере с приведенной структурой, вам понадобится лет 5, а то и более).
Ну я только пример привел, что у меня 3 столбца, на самом деле столбцов будет штук 30-40

Добавлено через 1 минуту
Salim_Destroyer, она есть в Excel, но она жутко тормозит, и на нем менеджеры не могут одновременно работать

Добавлено через 7 минут
Salim_Destroyer, Хоть я и программирую не долго, но по мне это бред такую огромную базу в Excel делать, для этого есть по мне SQL, которая работает на много быстрее. Сейчас у меня в базе ( в Excel) около 30000 записей, плюс куча вспомогательных листов ( где хранятся всякие наименования фурнитур и т.д.)+ модуль для распределения отгрузки ( вот это самый кошмар, модуль перебирает все записи заказов ищет даты, программа просто зависает на несколько минут). По-моему эта программа началась создаваться лет 10 назад. Но во дворе 21 век уже, есть способы уже написания такой программы более эффективнее. Это только мое мнение, вы можете не согласиться.

Добавлено через 37 минут
Цитата Сообщение от V_Monomax Посмотреть сообщение
для хранения большего объема работающих данных, это плохой тон. Да и крайне неудобно при наличии клинет-серверной архитектуры.
Excel файл понадобится, для того,чтобы если вдруг база грохнется и придется смотреть заказы, резервирование базы да есть способ, но пока база будет восстанавливаться в цеху идет работа и вдруг данные понадобятся.
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
19.10.2018, 08:53  [ТС]
Вот еще один момент, почему мне не нравится хранить id
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
19.10.2018, 09:01  [ТС]
Не понятно, что за Id используется, со временем забывается что делал. В данном случае таблица сколько контуров может иметь определенная модель двери
Миниатюры
Как хранить данные в таблице «заказ?  
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
19.10.2018, 09:26
Цитата Сообщение от MaksimkaI Посмотреть сообщение
Не понятно, что за Id используется, со временем забывается что делал. В данном случае таблица сколько контуров может иметь определенная модель двери
тут тоже есть решение, выгружаете не только результирующую таблицу, но и все справочники, и тогда будет понятно что за Id используется. Но тут мнений много, а реализовывать вам, поэтому, лучше учиться на своих ошибках . Я бы делал все по другому, а при наличии неуверенного сетевого окружения, я бы на клиентах делал бы кеширование справочников и отправляемых данных, для того что-бы можно было локально работать при обрыве связи с сервером. ну и конечно делал бы ежедневное инкрементальное резервирование (можно даже 2 - одно ночью, второе в обед). И проблем бы не знал.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,846
Записей в блоге: 1
19.10.2018, 13:28
Цитата Сообщение от MaksimkaI Посмотреть сообщение
Вот еще один момент, почему мне не нравится хранить id
Это от недостатка опыта. Id отлично работают.

Цитата Сообщение от MaksimkaI Посмотреть сообщение
Не понятно, что за Id используется, со временем забывается что делал.
Пользователь не должен видеть Id. Это служебная информация. Выводить нужно текстовую информацию. Изучи как использовать JOIN.

Цитата Сообщение от MaksimkaI Посмотреть сообщение
Ну я только пример привел, что у меня 3 столбца, на самом деле столбцов будет штук 30-40
Советую не торопиться с программированием БД и сначала проконсультироваться на форуме. Есть риск что ты спроектируешь плохую структуру базы и это будет повторение текущего решения с Excel.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.10.2018, 13:28
Помогаю со студенческими работами здесь

Как хранить ссылки на n таблиц в одной таблице?
Всем доброго времени суток! У меня возник вопрос. Есть ли у кого-нибудь примеры хранения ссылок на таблицы в другой таблице? Т.е....

Возможно ли хранить данные сkeditor в txt фаиле или это не правильно там их хранить?
В пред идущих темах я начал разбираясь с установкой этого чудесного редактора. У меня вопрос возможно ли хранить данные сkeditor в txt...

Как хранить только две записи в таблице с enum?
Для учебы работы с БД создал базу с тремя таблицами: employer, vacancy и status_vacancy. vacancy содержит внешний ключ на первичный ключ...

Как хранить данные данные в программе
Задался вопросом о том как хранить данные в программе ( кроме бд) . Знаю, что можно хранить в txt, xml. Можете подсказать еще способы (если...

Как хранить данные ?
Доброго времени суток! Второй раз слышу про MySQL и возник вопрос: Как хранить данные: у меня будут данные id=xxxxxxx; Имя=хххххх;...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru