|
|
|
супертипы и подтипы
|
|||
|---|---|---|---|
|
#18+
Кто знает, помогите разобраться. Введение в задачу. автомобиль (а/м) может выполнять два вида работ: постоянную, зависящую от цеха; и заявочную, формируемую вновь каждый день. Первый вид определяет назначенным а/м определенную работу. Второй вид определяет произвольную, не формализуемую, и а/м для этой работы заранее не известен. Для хранения данных о выполнении всех работ используется таблицы: выполнение работ по заявкам: table factClaim(idClaim, iDept, idCar, ...) PK = {idClaim}; idClaim = FK сущности planClaim выполнение постоянных работ: table factNeed(idNeed, idDept, idCar, ...) PK = {idNeed, idDept, idCar}; idNeed = FK сущности needWork, idDept = FK сущности Dept, idCar = FK сущности Car Для обоих видов работ выписывается путевой лист (п/л). Общая часть п/л - таблица wayBill(idTypeWork, idWork, idDept, idCar, ...) PK = {idTypeWork, idWork, idDept, idCar} idWork имеет значение либо factClaim.idClaim, либо factNeed.idNeed. idTypeWork - так называемый дискриминатор, определяющий смысл idWork. Таблицы factClaim и factNeed не содержат никаких параметров работы, три точки - это несущественные атрибуты. Все параметры - в таблице wayBill. Меня смущает, что в общей части (wayBill), кажется, неверно выбраны общие атрибуты для двух видов работ. Если исключить из wayBill.PK атрибут idDept, невозможно установить вид постоянных работ (idNeed). А на существущей схеме, для заявочных работ значение idDept не нужно. Проблемы бы не было в случае уникальности ключа заявочных работ (idClaim) внутри одного цеха, - тогда factClaim.PK = {idClaim, idDept}. Но это - искуственное требование. Вопрос: является ли предлагаемая схема правильной ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2002, 13:25:55 |
|
||
|
супертипы и подтипы
|
|||
|---|---|---|---|
|
#18+
Проблема все равно останется, ибо в таблице wayBill существует overloaded поле idWork. То есть как минимум в указанной схеме не представляется возможным поддерживать ссылочную целостность при помощи foreign keys. Что касается подходит ли схема к задаче - не могу ничего сказать, ибо не совсем понял условия. Но чувствую, что тут что-то не то. Скажем, наводят на подозрения повторения idCar & idDept в каждой таблице. -- Слон ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2002, 06:28:30 |
|
||
|
супертипы и подтипы
|
|||
|---|---|---|---|
|
#18+
to Слон: спасибо, а то я закомплексовал. "наводят на подозрения повторения idCar & idDept в каждой таблице." Уточню: 1. существует список необходимых работ, как: - привезти продукты (1) - привезти сырьё А (2) - привезти сырьё Б (3) - увезти сырьё В (4) 2. Эти работы назначены цехам: - цех1: работы 1 (это столовая 1) - цех2: работы 1 (это столовая 2) - цех3: работы 2, 3 - цех4: работы 3, 4 и т.д. Для п.1 сущность needWork(idNeed, ...) Для п.2 сущность deptNeedWork(idNeed, idDept) Транспортной службой для этих работ назначается автомобиль, - отсюда idCar. Этот idCar может изменяться со временем. Назначенный а/м - сущность carNeedWork(idNeed, idDept, idCar, dateBeg, dateEnd) и, собственно "работа" - это не idNeed, а парочка {idNeed, idDept}, т.е. "привезти продукты в столовую 1". Отсюда и в факте выполнения: table factNeed(idNeed, idDept, idCar, ...) присутствуют idCar & idDept. Заявочные работы похожи на постоянные, но с оттенком аварийности, но и здесь необходимы idCar & idDept. Теперь я хочу выделить некую постоянную часть этих работ, чтобы описать путевой лист всех работ, однако при этом, как Вы сказали, "чувствую, что тут что-то не то.". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2002, 07:06:31 |
|
||
|
супертипы и подтипы
|
|||
|---|---|---|---|
|
#18+
Я бы не делил работы на формализованные и не формализованные. Все работы не формализованные. Если этого придерживаться то все достаточно "стройно" и главное жизнеспособней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2002, 07:43:16 |
|
||
|
супертипы и подтипы
|
|||
|---|---|---|---|
|
#18+
to MarchCat "Я бы не делил работы на формализованные и не формализованные" Да, это было-бы идеально. То, что в задаче называется "постоянные работы" - это, собственно, план. При отсутствии заявок сформировать план работы автомобилей на день просто, - они уже назначены. Но существуют непредусматриваемые (неформализуемые) работы, скажем, похороны. В отличие от постоянных, для работ по заявкам и автомобиль неизвестен. Короче, дифференциация работ нужна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2002, 08:02:50 |
|
||
|
супертипы и подтипы
|
|||
|---|---|---|---|
|
#18+
Если я правильно понял то вопрос о структуре данных так вот в неформализованный тип работ можно вписать хоть плановые хоть неплановые ... PS не придумывайте сложную структуру. Все должно быть просто. Только простые структуры легко расширяемы и масштабируемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2002, 08:21:05 |
|
||
|
супертипы и подтипы
|
|||
|---|---|---|---|
|
#18+
to MarchCat Чувствую, Вы попали в точку, кажется, дело в правильном описании работ. Попробую реализовать то, что Вы сказали. Но: Если изобразить всё схематично, [factClaim]---[wayBill]---[factNeed] то вопрос вот в чем: связь (wayBill - factClaim) использует атрибут {idWork}, а связь (wayBill - factNeed) использует атрибуты {idWork, idDept} Вот что подозрительно. При этом, сущности factClaim и factNeed должны быть именно таковы, с разной структурой PK. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2002, 09:06:28 |
|
||
|
супертипы и подтипы
|
|||
|---|---|---|---|
|
#18+
Чего-то не понял. А может попроще, все работы в одной таблице, и есть тип работы? Не пойму, почему так нельзя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2002, 10:40:06 |
|
||
|
супертипы и подтипы
|
|||
|---|---|---|---|
|
#18+
я бы сделал так: таб_Автомобиль (уникальный id_a) таб_Т.накладные (имеет уникальный id_n и связан с автомобилем через id_a) таб_операции (шаблоны работ, имеет уникальный id_sh, связан с накладными через id_n) при работе ... выбираем автомобиль таб_Автомобиль. В таб т.накладные добавляется запись привязанная к конкретному автомобилю с данными из шаблона операций. Если операция (работа не известна, то в таб шаблон должен быть тип - Пустой шаблон, который то ж имеет id_sh. Оператор введет все поля сам. Со стороны кажется что шаблона нет, а на самом деле он есть. Мне кажется именно в этом у вас проблема. Ну, а далее ...не не буду вас путать :)))) все и так ок! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2002, 11:09:57 |
|
||
|
супертипы и подтипы
|
|||
|---|---|---|---|
|
#18+
to tygra Не получается объединение в одну таблицу заявок (1) и постояных (2): 1. (1) в отличие от (2) имеет атрибуты город назначения, предприятие, и др. 2. (2) в отличии от (1) может быть связанным со справочником автомобилей. 3. не важный аргумент, но всё же: (1) пополняется каждый день, а (2) практически не меняется. Хочется все путевые листы иметь в одной таблице. А решение хранить путевые листы в разных таблицах я оставил, как последнюю надежду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2002, 11:11:37 |
|
||
|
супертипы и подтипы
|
|||
|---|---|---|---|
|
#18+
Вот и мне показалось странным хранение 2 одинаковых сущностей - постоянная работа, заявочная работа - в разных таблицах. В отличие от постоянных, для работ по заявкам и автомобиль неизвестен. Короче, дифференциация работ нужна Так автомобиль не вообще неизвестен, а неизвестен до момента ввода в базу. Когда данные должны будут занесены в таблицу idCar должне быть определен. Либо я чего-то непонимаю глобально. IMHO получается, что составляется какой-то план на период(год, месяц) с возможностью дополнять/корретировать этот план в любой момент. Но в одной таблице это сделать проще. Например, отследить такой конфликт, что на заявочную работу назначается автомобиль, который в этот же промежуток времени занят на постоянной работе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2002, 11:12:51 |
|
||
|
супертипы и подтипы
|
|||
|---|---|---|---|
|
#18+
ой млин. таб накладных дочинена и автомобилю и виду работ. !!!!!!!!!!!!!!!!!!!!!!!!! А в остальном все верно .... прошу прощения .... :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2002, 11:29:39 |
|
||
|
супертипы и подтипы
|
|||
|---|---|---|---|
|
#18+
to marchCat Вероятно, под "таб_Т.накладные" надо понимать путевой лист. Вобще, путевой лист - это table(anyWork, idCar, idDrive(s), date, {parameters}) при этом, в частности, № путевого листа лучше не использовать как ключ, - для разных видов работ этот № может совпадать. [Путевой лист].PK - это {anyWork, idCar, date} ANYWork, потому, что здесь может быть несколько атрибутов, в том числе idWork. Вот это значение и ссылается либо на [заявка], либо на [пост. работа]. /* это строка S */ Для "таб_операции" иметь "пустой шаблон" представляется искусственным. и, если я правильно понял, "таб_операции" - это справочник всех работ ? Меня же смущает, что ссылки в строке S структурно разные для [заявка] и [пост. работа]. !! В последний момент увидел Вашу добавку. Конечно !! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2002, 12:00:34 |
|
||
|
супертипы и подтипы
|
|||
|---|---|---|---|
|
#18+
Прости, так получилось ... :) удачи Вам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2002, 12:03:50 |
|
||
|
супертипы и подтипы
|
|||
|---|---|---|---|
|
#18+
Предлагаю такой простой вариант. 1. Учитываются заявки - это план для формирования путевых листов. Заявки двух видов - разовые и постоянные. Размещены в одной таблице заявок, имеют PK - идентификатор заявки. Кроме того имеют атрибут исполнения (или даты действия). 2. Путевые листы - это уже задания а/м на выполнение работ. Формируются из заявок. (Если используется атрибут исполнения, то он в разовой заявке устанавливается в состояние "исполнена"). PK - идентификатор задания (простой счётчик). Атрибуты заявки или копируются в путевой лист, или, если гарантируется неизменность значений атрибутов заявки, получаются по ссылке на ид.заявки. Схематично так: Код: plaintext А решить проблему "уникальности ключа заявочных работ (idClaim) внутри одного цеха" думаю не сложно. (точнее я её не вижу). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2002, 12:31:59 |
|
||
|
супертипы и подтипы
|
|||
|---|---|---|---|
|
#18+
2sql IMHO Ваша схема вполне работоспособна на первый взгляд. Однако, она несколько необычна. Даже если Вы не можете объединить таблицу заявок (1) и постояных (2) (хотя не совсем понятно, что мешает это сделать, ну будут некоторые значения в строке иметь значения NULL), то встает вопрос, что вы будете делать, если завтра Вам понадобится добавить кроме постоянных и заявочных работ ну например совместительские работы. Как минимум придется вводить еще один idTypeWork. Согласно Вашей схеме придется создавать еще ону таблицу, аналогичную factClaim и factNeed, где будут свои "..." плюс к этому достаточно значительно переделывать программный код. Если это Вас не смущает, то дерзайте. Вопрос о том, что я все же не совсем видимо точно представляю себе схему Вашей деятельности во всех ньюансах. Я бы все же посоветовал иметь одну таблицу для всех работ (причин для отказа от этого не вижу), где бы предложил держать и idTypeWork, а из wayBill его исключить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2002, 12:44:11 |
|
||
|
супертипы и подтипы
|
|||
|---|---|---|---|
|
#18+
Спасибо всем за обсуждение. Извините за небольшое отступление: у меня нач. строгий, но умный. Ничего не аргументирует и не объясняет, только либо отвергает, либо принимает (реже). Посоветоваться не с кем. (а, кстати, что такое IMHO?) А теперь по делу: to dosemi Согласен, я тоже видел эту опасность (новый тип работ), но не мог явно ткнуть в этот тип пальцем. Похоже, я склонен согласиться со всеми, кто предлагал использовать одну таблицу для всех работ. Да, так должно быть. Еще раз всем спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2002, 13:25:58 |
|
||
|
супертипы и подтипы
|
|||
|---|---|---|---|
|
#18+
Уважаемый Sql вы ходите около решения Пытаетесь держаться за разные таблицы для постоянной и временной работ, а их нужно объеденить в одну и появляется таблица некий справочник для постоянных работ для автомобиля Также Вы пишете Для п.1 сущность needWork(idNeed, ...) Для п.2 сущность deptNeedWork(idNeed, idDept) но для п.1 тоже нужен цех, он там только будет постоянным, так-что из 2 сущностей получаем одну Набросок таблиц (заголовки путевого листа) 1. Invoice Invoice (PK) Number Date Car Driver (строки путевого листа) 2 InvLine InvLine (PK) Invoice Need Dept (справочик работ) 3 Work Work (PK) Name TypeWork (Справочник постоянных работ для авто) 4 ConstWork ConstWork (PK) Car Work Dept Begin End Из таблицы ConstWork поля Work и Dept при заполнении переносятся в InvLine, так-что придется программировать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2002, 13:54:49 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32043394&tid=1821108]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 193ms |
| total: | 305ms |

| 0 / 0 |
