powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите пожалуиста построить модель базы (концептуальную и физическую)
15 сообщений из 15, страница 1 из 1
Помогите пожалуиста построить модель базы (концептуальную и физическую)
    #33107378
maxim7474
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите пожалуйста создать базу. Есть база такой вот структуры, удоволетворяет всем бизнес-правилам, но уж очень тяжело с ней работать.
CREATE TABLE [dbo].[Place] (
[YEAR] [smallint] NOT NULL ,
[MONTH] [smallint] NOT NULL ,
[CEX] [smallint] NOT NULL ,
[GORIZ] [smallint] NOT NULL ,
[PLACE_Id] [int] IDENTITY (1, 1) NOT NULL PRIMARY KEY CLUSTERED )

CREATE TABLE [dbo].[WORK1] (
[PLACE_ID] [int] NOT NULL FOREIGN KEY REFERENCES [dbo].[Place] ([PLACE_ID]),
[NUM] [smallint] NOT NULL ,
[W1P1] [smallint] NOT NULL ,
[W1P2] [smallint] NOT NULL ,
[W1P3] [smallint] NOT NULL ,
[W1P4] [smallint] NOT NULL,
[ROW_ID] [int] IDENTITY (1, 1) NOT NULL )
CREATE TABLE [dbo].[WORK2] (
[PLACE_ID] [int] NOT NULL FOREIGN KEY REFERENCES [dbo].[Place] ([PLACE_ID]),
[NUM] [smallint] NOT NULL ,
[W2P1] [smallint] NOT NULL ,
[W2P2] [smallint] NOT NULL ,
[W2P3] [smallint] NOT NULL ,
[W2P4] [smallint] NOT NULL
[ROW_ID] [int] IDENTITY (1, 1) NOT NULL )
CREATE TABLE [dbo].[WORK3] (
[PLACE_ID] [int] NOT NULL FOREIGN KEY REFERENCES [dbo].[Place] ([PLAC_ID]),
[NUM] [smallint] NOT NULL ,
[W3P1] [smallint] NOT NULL ,
[W3P2] [smallint] NOT NULL ,
[W3P3] [smallint] NOT NULL
[ROW_ID] [int] IDENTITY (1, 1) NOT NULL )
CREATE TABLE [dbo].[WORK4] (
[PLACE_ID] [int] NOT NULL FOREIGN KEY REFERENCES [dbo].[Place] ([PLAC_ID]),
[NUM] [smallint] NOT NULL ,
[W4P1] [smallint] NOT NULL
[ROW_ID][int] IDENTITY (1, 1) NOT NULL)
CREATE TABLE [dbo].[Remain] (
[Place_Id] [int] NOT NULL ,
[Rem1W1P1] [numeric](6, 2) NULL ,
[Rem1W2P2] [numeric](6, 2) NULL ,
[AddW1P1] [numeric](6, 2) NULL ,
[AddW2P2] [numeric](6, 2) NULL ,
[RedW1P1] [numeric](5, 1) NULL ,
[RedW2P2] [numeric](5, 1) NULL ,
[Rem2W1P2] [numeric](6, 2) NULL ,
[Rem2W2P2] [numeric](6, 2) NULL )
Смысл данных в таблицах Place Cex-цех где работала установка(цехов всего 5), Goriz-горизонт в этом цехе(в каждом цехе несколько горизонтов, до 10). В одном месяце установка может работать на разных горизонтах в одном цехе, и может работать в разных цехах. Таблицы типа WORKn описывают разные виды работ выполняемые установками. Например WORK1 содержит данные по выполненным работам первого вида в течении месяца, поля типа WnPn-хорактеризуют этот вид работ. Num-номер установки(в основном но не всегда работают в течении месяца только в одном цехе, в каждом цехе их примерно по 15). Place_Id - понятно из связи. Одному "месту" в каждой из таблиц "Работ" может соответствоть по несколько записей. Например установка в мая в сехе №1 на 1-горизонте выполняла как первый вид работ так и второй. Причем, например в таблице WORK1 одной записи из Place будет соответствовать 2 записи, т.к при выполнении работы 1-го вида показатель W1P3 имел вначале одно значение, а потом изменился на другое, и это надо учитывать. Правила обеспечивающие верность хранимых данных в других таблицах типа WORKn такие же. Remain-таблица остатков. Содержит суммарные данные по горизонту в каждом цехе за месяц. Rem2***-остаток на конец месяца. В конце текущего этот остаток становится остатком на начало следующего - Rem1***. AddW1P1 - хоть по умолчанию и должен содержать суму по горизонту в цехе по строкам из таблици WORK1 значений показателя W1P1, но может и довольно часто редактируется(такова технология работ), с AddW2P2 то-же самое. С RedW1P1 и RedW2P2 все также как с пердыдущими, только берутся они из неуказанных здесь таблиц(описывающих работу установок другого вида). С таблицей Remain и основные проблеммы. Не понятно когда и как лучше ее заполнять(может тригера написать на изменение в таблицах WORK1 и WORK2 подсчитывающие сумму и корректирующие таблицу Remain, толи из клеенского приложение это делать), ну в общем с этой таблицей все как то очень плохо. Также мне кажется что в запросе вообще невозможно правильно соеденить например таблици Place, Work1 и Work2, т.к. одной записи из таблицы Place в таблице WORK1 может соответсвовать 2 записи, а в таблице WORK2 только одна. Как здесь сопоставлять строки учитывая номер установки вообще не понятно. Я думаю что все проблеммы из -за неправильной структуры базы, но исправить это не хватает знаний. Помогите пожалуйста.
...
Рейтинг: 0 / 0
Помогите пожалуиста построить модель базы (концептуальную и физическую)
    #33108362
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый, приведите, пожалуйства, вашу схему в виде рисунка. Иначе очень трудно ее воспринять и понять. Тем более с неинформативными названиями таблиц вроде WORK1. Хотите помощи - сделайте шаг навстречу помощникам.
...
Рейтинг: 0 / 0
Помогите пожалуиста построить модель базы (концептуальную и физическую)
    #33108427
maxim7474
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извеняюсь за не правильный скрипт для базы, вот рабочий и схема в виде рисунка. Правда ни как не могу понять как прикрепить рисунок.
Код: 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.
CREATE TABLE [dbo].[Place] (
[YEAR] [smallint] NOT NULL ,
[MONTH] [smallint] NOT NULL ,
[CEX] [smallint] NOT NULL ,
[GORIZ] [smallint] NOT NULL ,
[PLACE_Id] [int] IDENTITY ( 1 ,  1 ) NOT NULL PRIMARY KEY CLUSTERED )

CREATE TABLE [dbo].[WORK1] (
[PLACE_ID] [int] NOT NULL FOREIGN KEY REFERENCES [dbo].[Place] ([PLACE_ID]),
[NUM] [smallint] NOT NULL ,
[W1P1] [smallint] NOT NULL ,
[W1P2] [smallint] NOT NULL ,
[W1P3] [smallint] NOT NULL ,
[W1P4] [smallint] NOT NULL,
[ROW_ID] [int] IDENTITY ( 1 ,  1 ) NOT NULL )

CREATE TABLE [dbo].[WORK2] (
[PLACE_ID] [int] NOT NULL FOREIGN KEY REFERENCES [dbo].[Place] ([PLACE_ID]),
[NUM] [smallint] NOT NULL ,
[W2P1] [smallint] NOT NULL ,
[W2P2] [smallint] NOT NULL ,
[W2P3] [smallint] NOT NULL ,
[W2P4] [smallint] NOT NULL,
[ROW_ID] [int] IDENTITY ( 1 ,  1 ) NOT NULL ) 

CREATE TABLE [dbo].[WORK3] (
[PLACE_ID] [int] NOT NULL FOREIGN KEY REFERENCES [dbo].[Place] ([PLACE_ID]),
[NUM] [smallint] NOT NULL ,
[W3P1] [smallint] NOT NULL ,
[W3P2] [smallint] NOT NULL ,
[W3P3] [smallint] NOT NULL, 
[ROW_ID] [int] IDENTITY ( 1 ,  1 ) NOT NULL )

CREATE TABLE [dbo].[WORK4] (
[PLACE_ID] [int] NOT NULL FOREIGN KEY REFERENCES [dbo].[Place] ([PLACE_ID]),
[NUM] [smallint] NOT NULL ,
[W4P1] [smallint] NOT NULL, 
[ROW_ID][int] IDENTITY ( 1 ,  1 ) NOT NULL)

CREATE TABLE [dbo].[Remain] (
[Place_Id] [int] NOT NULL PRIMARY KEY CLUSTERED FOREIGN KEY REFERENCES [dbo].[Place] ([PLACE_ID]),
[Rem1W1P1] [numeric]( 6 ,  2 ) NULL ,
[Rem1W2P2] [numeric]( 6 ,  2 ) NULL ,
[AddW1P1] [numeric]( 6 ,  2 ) NULL ,
[AddW2P2] [numeric]( 6 ,  2 ) NULL ,
[RedW1P1] [numeric]( 5 ,  1 ) NULL ,
[RedW2P2] [numeric]( 5 ,  1 ) NULL ,
[Rem2W1P2] [numeric]( 6 ,  2 ) NULL ,
[Rem2W2P2] [numeric]( 6 ,  2 ) NULL )
...
Рейтинг: 0 / 0
Помогите пожалуиста построить модель базы (концептуальную и физическую)
    #33108458
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что касается меня, то я бы:
1. Оставил только одну таблицу Work (из существующих четырех) и добавил в нее поле WorkID
2. Создал бы таблицу Works с полями WorkID и Work_Name
3. Связал бы эти таблицы по WorkID
...
Рейтинг: 0 / 0
Помогите пожалуиста построить модель базы (концептуальную и физическую)
    #33109096
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxim7474Num-номер установки(в основном но не всегда работают в течении месяца только в одном цехе, в каждом цехе их примерно по 15). Place_Id - понятно из связи. Одному "месту" в каждой из таблиц "Работ" может соответствоть по несколько записей. Например установка в мая в сехе №1 на 1-горизонте выполняла как первый вид работ так и второй. Причем, например в таблице WORK1 одной записи из Place будет соответствовать 2 записи, т.к при выполнении работы 1-го вида показатель W1P3 имел вначале одно значение, а потом изменился на другое, и это надо учитывать. Правила обеспечивающие верность хранимых данных в других таблицах типа WORKn такие же. Remain-таблица остатков. Содержит суммарные данные по горизонту в каждом цехе за месяц. Rem2***-остаток на конец месяца. В конце текущего этот остаток становится остатком на начало следующего - Rem1***. AddW1P1 - хоть по умолчанию и должен содержать суму по горизонту в цехе по строкам из таблици WORK1 значений показателя W1P1, но может и довольно часто редактируется(такова технология работ),
[]
С таблицей Remain и основные проблеммы. Не понятно когда и как лучше ее заполнять(может тригера написать на изменение в таблицах WORK1 и WORK2 подсчитывающие сумму и корректирующие таблицу Remain, толи из клеенского приложение это делать), ну в общем с этой таблицей все как то очень плохо. Также мне кажется что в запросе вообще невозможно правильно соеденить например таблици Place, Work1 и Work2, т.к. одной записи из таблицы Place в таблице WORK1 может соответсвовать 2 записи, а в таблице WORK2 только одна. Как здесь сопоставлять строки учитывая номер установки вообще не понятно. Я думаю что все проблеммы из -за неправильной структуры базы, но исправить это не хватает знаний. Помогите пожалуйста.
Логическая структура БД суть запись некоторых, наиболее фундаментальных бизнес-правил. Из этого в частности вытекают бизнес-ключи.
1)Каково правило для WORK<n> и что является бизнес-ключом? Могу предположить, что это
([PLACE_ID] ,[NUM] ,[W1P3] если есть, [W1P4] если есть ).
Или допустимы полностью дублирующиеся (за исключением суррогатного ключа ROW_ID) записи? Если все же бизнес-ключ существует, то введите соответствующее UNIQUE ограничение.
2)Остатки должны быть в разезе номеров установок? - тогда действительно опечатка в структуре REMAINS. Опять таки определите его бизнес ключ,
для начала простым русским языком типа
Код: plaintext
Remain содержит итоговые значения [Rem1W1P1] ,...[Rem2W2P2] для каждого сочетания [Place_Id] и номера установки
3)Номера установок как-то нормированы? - тогда полезен справочник установок.
...
Рейтинг: 0 / 0
Помогите пожалуиста построить модель базы (концептуальную и физическую)
    #33109117
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ModelR 1)Каково правило для WORK<n Из написанного вами не ясно, существуют ли бизнес-правила уникальности записей.
...
Рейтинг: 0 / 0
Помогите пожалуиста построить модель базы (концептуальную и физическую)
    #33109161
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxim7474
AddW1P1 - хоть по умолчанию и должен содержать суму по горизонту в цехе по строкам из таблици WORK1 значений показателя W1P1, но может и довольно часто редактируется(такова технология работ), с AddW2P2 то-же самоеИногда лучше иметь или отдельное поле или отдельную таблицу для данных, введенных вручную и для вычисленных автоматически, или флаг обозначающий источник данных - зависит от логики приложения. Например, может существовать запрет на автоматический расчет после редактирования вручную.
...
Рейтинг: 0 / 0
Помогите пожалуиста построить модель базы (концептуальную и физическую)
    #33109646
maxim7474
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Установка это экскаватор. В течении одного месяца он может перемещатся по горизонтам внутри карьера и более того может быть переведен в другой карьер.
Код: plaintext
ALTER TABLE [dbo].[PLACE] WITH NOCHECK ADD CONSTRAINT [IX_Place] UNIQUE  NONCLUSTERED ([YEAR], [MONTH], [CEX], [GORIZ])  ON [PRIMARY]
Экскаватор тогружает продукцию разного вида или выполняет несколько типов работ. WORK1-описывает отгрузку руды на ж.д. транспорт, W1P1 - количество вагонов отгруженой руды (шт.), W2P2 - загрузка вагонов(м.куб.), W3P3 - удельный вес руды, W4P4 - расстояние от места погрузки вагонов(экскаватора) до места выгрузки вагонов(км.). Если экскаватор грузил руду в одном цехе на одном и том-же горизонте но с разным удельным весом то в таблице должно быть 2-ве записи, т.к. этот показатель влияет на учет руды в тоннах. Если экскаватор грузил руду в одном цехе на одном и том-же горизонте с одним и тем-же удельным весом но растояние бало разное то в таблице должно быть 2-ве записи, т.к. этот показатель оценивает объем работ выполненный железнодорожниками. Следовательно получаем такое ограничение для таблицы WORK1:
Код: plaintext
ALTER TABLE [dbo].[WORK1] WITH NOCHECK ADD CONSTRAINT [IX_WORK1] UNIQUE  NONCLUSTERED ([PLACE_ID], [NUM], [W1P3], [W1P4])  ON [PRIMARY] 
WORK2 - описывает отгрузку вскрыши на ж.д. транспорт, здесь все тоже самое что и при отгрузке руды.
Код: plaintext
ALTER TABLE [dbo].[WORK2] WITH NOCHECK ADD CONSTRAINT [IX_WORK2] UNIQUE  NONCLUSTERED ([PLACE_ID], [NUM], [W2P3], [W2P4])  ON [PRIMARY] 
WORK3- отгрузка вскрыши на автотранспорт. W3P1-объем отгруженой вскрыши(м.куб.), W3P2 - удельный вес вскрыши, W3P2 - растояние(км.). Т.е.
Код: plaintext
ALTER TABLE [dbo].[WORK3] WITH NOCHECK ADD CONSTRAINT [IX_WORK3] UNIQUE  NONCLUSTERED ([PLACE_ID], [NUM], [W3P2], [W3P3])  ON [PRIMARY] 
WORK4 - бестранспортная перевалка. W4P1 - объем в м.куб
Код: plaintext
ALTER TABLE [dbo].[WORK4] WITH NOCHECK ADD CONSTRAINT [IX_WORK4] UNIQUE  NONCLUSTERED ([PLACE_ID], [NUM], [W4P1])  ON [PRIMARY] 
В таблица Remain - хронятся данные по остаткам руды и вскрыши по горизонту
Rem1W1P1-остаток руды на начало месяца, [Rem1W2P2] - остаток вскрыши на начало месяца, [AddW1P1]-прибыло(взорвано) руды на горизонте в течении месяца, [AddW2P2]-прибыло(взорвано) вскрыши на горизонте в течении месяца, [RedW1P1]-убыло(отгружено) руды(SUM(W1P1) с группировкой по горизонту в карьере за месяц), [RedW2P2]-убыло(отгружено) вскрыши (SUM(W2P1*W2P2+W3P1) с группировкой по горизонту в карьере за месяц),
[Rem2W1P2]-остаток руды на конец месяца, [Rem2W2P2]-остаток вскрыши на конец месяца). Уникальность записи обеспечивается первичным ключом.
Код: plaintext
ALTER TABLE [dbo].[Place] WITH NOCHECK ADD PRIMARY KEY CLUSTERED ([PLACE_Id]) ON [PRIMARY]
Вот такие бизнес-правила. Оговорюсь сразу, сложившаяся система учета вынуждает хранить именно такие показатели, и менят ее я не могу.
Если вести справочник установок типа (Год,Месяц,Цех..дальше не знаю что) то по моему это излишне все усложнит, и как понять что и где он отгружал если в течении месяца он работал в двух карьерах(по суткам учет не ведется). Если объеденить таблицы WORKn в одну, как пердложил Станислав C, то ведь работы оцениваются по разному-различные типы данных для хранения показателей разное их количество и как при этом обеспечить бизнес-правила(уникальность записи). Самое удобное для анализа данных вводимых данных, непосредственно при вводе свернуть таблицы WORKn в одну но так-
(Place_Id, Num, W1P1, W1P2, W1P3, W1P4, W2P1, W2P2, ....., W4P1) но как при этом обеспечить уникальность строки согластно бизнес-правилам я не смог догадаться. Если посмотреть внимательно то если соеденить требования на уникальность строки от таблицы WORK1 с требованиями таблицы WORK2 и т.д., то это не будет правильным.
...
Рейтинг: 0 / 0
Помогите пожалуиста построить модель базы (концептуальную и физическую)
    #33109738
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxim7474...
WORK1-описывает отгрузку руды на ж.д. транспорт,
W1P1 - количество вагонов отгруженой руды (шт.),
W1P2 - загрузка вагонов(м.куб.),
W1P3 - удельный вес руды,
W1P4 - расстояние от места погрузки вагонов(экскаватора) до места выгрузки вагонов(км.).
...
WORK2 - описывает отгрузку вскрыши на ж.д. транспорт,
здесь все тоже самое что и при отгрузке руды.
...
WORK3- отгрузка вскрыши на автотранспорт.
W3P1-объем отгруженой вскрыши(м.куб.),
W3P2 - удельный вес вскрыши,
W3P2 - растояние(км.).
...
WORK4 - бестранспортная перевалка.
W4P1 - объем в м.куб


А теперь абстрагируйтесь от структуры и найдите совпадения...
Что мы видим в таблицах:
- во всех есть объем (куб.м);
- в трех из четырех - удельный вес и расстояние
- в двух - количество вагонов (шт)...

Таким образом, можно объединить все четыре структуры в одну без ущерба для данных...
Например: Р1 - количество (шт), Р2 - объем (куб.м), Р3 - удельный вес, Р4 - расстояние (км). Для идентификации вида работ - использовать идентификатор (WorkID).

Таким образом, для работ Work1 и Work2 будут заполнены все поля (Р1-Р4), для работы Work3 будут заполнены поля Р2-Р4, а для работы Work4 - только поле Р2... А вот как их в дальнейшем интерпретировать - это уже проблема не схемы данных, а бизнес-логики...
...
Рейтинг: 0 / 0
Помогите пожалуиста построить модель базы (концептуальную и физическую)
    #33109798
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроме того, если проанализировать условия отбора записей, то получится, что в трех таблицах уникальность записи определяется удельным весом и расстоянием, а в четвертой - объемом переложенной руды или породы...
Таким образом, три из четырех таблиц (WORK1,WORK2 и WORK3 )можно объединить на 100%!
...
Рейтинг: 0 / 0
Помогите пожалуиста построить модель базы (концептуальную и физическую)
    #33109910
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Станислав C. А вот как их в дальнейшем интерпретировать - это уже проблема не схемы данных, а бизнес-логики... ИМХО неверное разделение. Схема базы данных _должна_ поддерживать стабильную часть бизнес-логики. Если ожидается, что схемы показателей WORKn меняются, хотя бы медленно, раз в год, то да, есть смысл переходить на обобщенную структуру. Если они стабильны много лет, лучше, когда DDL уже отражает бизнес логику.
Это в принципе, однако первые три таблицы действительно имеют тождественную структуру ключей и изначально их вполне можно обобщить. Однако не стал бы затевать переделку, если какая-то часть системы уже написана. По крацней мере сейчас нет NULL полей.


авторWORK4 - бестранспортная перевалка. W4P1 - объем в м.куб
ALTER TABLE [dbo].[WORK4] WITH NOCHECK ADD CONSTRAINT [IX_WORK4] UNIQUE NONCLUSTERED ([PLACE_ID], [NUM], [W4P1]) ON [PRIMARY] не понял, для чего [W4P1] в ключе - это же как раз значение показателя, а не его признак?

Если учет остатки и обороты по установкам не нужны, то в чем заморочка с авторКак здесь сопоставлять строки учитывая номер установки вообще не понятно.
...
Рейтинг: 0 / 0
Помогите пожалуиста построить модель базы (концептуальную и физическую)
    #33111011
maxim7474
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да дествительно я как то не заметил, что при обьединении 3-х таблиц с уникальностью записи все впарядке, спасибо. На самом деле можно сказать что ни чего еще не написано. Идет переделка проекта написанного на FoxPro(dos). Там база такая (Year, Month, Cex, Goriz, Num, W1P1, W1P2, W1P3, W1P4, W2P1, W2P2, ....., W4P1) и таблицы Remain. Она очень удобна анализа данных непосредственно при вводе, но ни как не соответствует бизнес-правилам, постоянное дублирование данных. То что представил за существующую БД. Это мой вариант, по моему такая схема хорошо потдерживает бизнес-правила(это касается таблиц работ). Перечень показателей действительно был стабилен несколько лет, но пришло новое руководство и система учета подвержена изменениям, понятно что переждать это у меня нет возможность. Хочу еще уточноть - хоть в таблицах и есть везде м.куб. но загрузка думпкар(вагонов) и объем добытой вскрыши, перевалки показатели по сути разные и выражаются несопостовимыми по парядку числами(numeric(3,1) и int(6) - то что я в базе везде указал smallint - это так для упрощения). На счет: "Как здесь сопоставлять строки учитывая номер установки вообще не понятно." - при написании клиенского приложения я сталкиваюсь с не разрешимой проблеммой, с помощью SQL-запросов.
Самая удобная форма для ввода(на чем настаевает заказчик)
НомКолДумпРудЗагрДумпРудУдРудРастРудКолДумпВскрыш...Перевал2010030.63.51210...600002012030.63.57-...-4-----...150000итого по гориз.... А при моем варианте надо соединять таблицы, например при соединении WORK1 и WORK2, если в одной таблице одной строке из Place соответсвует две строки, для экскаватора №20, а в WORK2 для этой же строки из Place и для этого-же экскаватора №20 только одна то как бы я этого не хотел в результате SQL-запроса я получу произведение числа записей из первой таблицы на число записей из второй. Т.е. необходим достаточно сложный алгоритм на стороне клиента с применением временных таблиц причем рассположенных на HDD т.к. в DELPHI нет таблиц в памяти. Ну и куча других сложностей.
Может лучше Num вынести в таблицу Place, а таблицу Remain вообще не связывать. А как бы сделали вы и почему именно так. Подскажите пожалуйста.
Уточненеие: на самом деле за то что была отгружена руда или вскрыша на ж.д. транспорт отвечает показатель "удельный вес" если от 2.5 до 3.25 - вскрыша больше руда, на автотранспорт грузят только вскрышу, при перевалка просто не важно что переваливают. В Remain столбци Rem2W1P2 и Rem2W2P2 - чисто вычесляемые, но их присутствие в таблице облегчает перенос остатков с конца месяца на начало следующего.
...
Рейтинг: 0 / 0
Помогите пожалуиста построить модель базы (концептуальную и физическую)
    #33111595
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОК,
Давайте начнем с логики.
Речь идет о фиксации некоторых показателей, поэтому удобно изобразить их фунциональными зависимостями. Используя обозначения из вашей формы для ввода
Код: plaintext
1.
2.
Перевалка: (Место, Ном)->(Объем)
ОтгрузкаАвто: (Место,Ном,УдРуд,РастРуд) -> Объем
ОтгрузкаЖелдор: (Место,Ном,УдРуд,РастРуд) -> Объем,КолДумп
можно и так:
Код: plaintext
1.
Отгрузка : (ТипТранспорта,Место,Ном,УдРуд,РастРуд) -> Объем,КолДумп
      Ограничение: Если ТипТранспорта = 'Авто' то КолДумп= 0 .
Кроме того существует вычисляемая зависимость
Код: plaintext
1.
ТипГруза: (УдРуд) -> ТипГруза
       Если УдРуд < 3 . 25  то ТипГруза = 'Вскрыша' иначе ТипГруза = 'Руда' 

Если так, то в вашей форме для ввода не понятно, как в одной строке
при одном значении УдРуд может быть ненулевое значение КолДумп и для Вскрыши и для Руды?
...
Рейтинг: 0 / 0
Помогите пожалуиста построить модель базы (концептуальную и физическую)
    #33111941
maxim7474
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извеняюсь, привошу форму без сокращений(под формой должна быть подобной EXCEL-евской таблице, в которой они сечас проводят анализ распечатывают результат, а потом "вбивают" его в FoxPro-шную базу)
НомКолДумпРудЗагрДумпРудУдРуд РастРудКолДумпВскрышЖдЗагрДумпВскрышЖдУдРудВскрышЖдРастРудВскрышЖдОбъемВскрышАвтУдВскрышАвтРастВскрышЖдПеревал 2010030.63.5121030.63.210500003.17600002010030.63.510-------- 4-----------150000по 100 гориз200---10---50000--21000020----10030.63.210500003.171215030.63.46-------- 8--------700003.212по 130 гориз150---100---120000---.......................................
К сожалению я не могу четко понять ваш способ записи функциональных зависимостей.

Перевалка: (Место, Ном)->(Объем)
ОтгрузкаАвто: (Место,Ном,УдРуд,РастРуд) -> Объем
ОтгрузкаЖелдор: (Место,Ном,УдРуд,РастРуд) -> Объем,КолДумп
поясните пожалуйста как это трактуется.
Во втором варианте не понял куда деть перевалку
Если можно но поподробней пожалуйста.
...
Рейтинг: 0 / 0
Помогите пожалуиста построить модель базы (концептуальную и физическую)
    #33112208
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxim7474К сожалению я не могу четко понять ваш способ записи функциональных зависимостей.

Перевалка: (Место, Ном)->(Объем)
ОтгрузкаАвто: (Место,Ном,УдРуд,РастРуд) -> Объем
ОтгрузкаЖелдор: (Место,Ном,УдРуд,РастРуд) -> Объем,КолДумп
поясните пожалуйста как это трактуется.
Во втором варианте не понял куда деть перевалку
Если можно но поподробней пожалуйста.

От принятой у Дейта (гл.10 издание 7) отличается явным указанием имени зависмости, которое является хорошим кандидатом для имени таблицы.
ИмяЗависимости:(Детерминант) -> Зависимые атрибуты.

Перевалка во втором случае такая же как и в первом.

По форме ввода теперь все ясно (только заголовок видимо съехал на позицию влево :), она вполне соответствует описанной структуре ФЗ и соответсвенно таблиц. Неприятность при этой форме в том, что изменение значений ведет добавлению/удалению записей в БД, т.е. клиент конечно веселый. Успехов!
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите пожалуиста построить модель базы (концептуальную и физическую)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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