| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > СУБД, общие вопросы > Помогите с организацией БД. |
| Автор: x404 28.1.2004, 01:02 |
| Помогите с организацией БД Проблема в следующем(а может это и напрасные опасения, тогда просто скажите, что все нормально): Есть ИЗДЕЛИЕ, оно включает в себя несколько ДЕТАЛЕЙ, каждое из которых имеет на изготовление свою норму времени и расценку. ДЕТАЛЬ можно изготовить на нескольких цехах(их 7 штук - цехов) и естественно различные нормы. Так вот как мне хранить эти цеха в одной табличке (как я и хочу, там просто названия цехов без всяких дополнительной информации по нему, хотя они и находятся в разных городах) или в различных таблицах? ИЗДЕЛИЕ хранить в отдельной таблице или нет? (хочу в этой же). На данный момент таблица мне представляется такой ---------------------- id_izd id_det (ключевое) Наименование изделия Диаметр изделия Наименование детали Количество деталей(Это вроде примечания. Ни на что влиять не будет) Норма времени Расценка Цех1 Цех2 ... Цех7 --------------------- Изделие не могу хранить в другой таблице, потому как вообще изделие включает в себя другие дополнительные параметры расценка это только часть, а для того чтобы предложить внесение в полный состав ИЗДЕЛИЯ(id_izd как раз для этого) необходимо выбрать как раз из таблицы по Наименованию изделия и Диаметру изделия. з.ы.Может это вообще ни к чему я написал. Используется SYBASE. Пишу на Delphi.(если это чем то поможет) Спасибо! |
| Автор: Cashey 28.1.2004, 10:34 |
| Связанные таблицы и только так. Пример: Таблица 1. 1. | Изделие№1 | Другие характиристики Изделия№1 2. | Изделие№2 | Другие характиристики Изделия№2 N. | .................. | ........................................................... Справочник цехов 1. | Цех№1 2. | Цех№2 Справочник деталий 1. | Деталь1 | 1(идентификатор принадлежности к 1-му изделию) | 2(идентификатор принадлежности к 2-му цеху) | Другие характиристики Детали1 2. | Деталь2 | 2(идентификатор принадлежности к 2-му изделию) | 2 | Другие характиристики Детали2 3. | Деталь3 | 1 | 1(идентификатор принадлежности к 1-му цеху) | Другие характиристики Детали2 N. | ............. | .. | .................................................... | .......... |
| Автор: AntonSaburov 28.1.2004, 10:37 |
| Я бы сделал так: 1. Таблица для изделия включает в себя только описание изделия. И больше ничего. 2. Отдельная таблица для деталей. 3. Таблица для связи иделия и деталей, входящих в него. 4. Отдельная талица для списка цехов. ИД, наименование, месторасположение и прочая. 5. Таблица для связи детали и цеха. Вот тут можно поиграть вовсю. Номер детали, номер цеха, норма для этого цеха. Это просто минимум. Вот получается 5 таблиц. Поехали дальше Также можно легко перейти к виду, когда деталь просто необходимо делать в нескольких цехах. Например сначала в первом, потом в четвертом, потом в десятом. Просто добавляется столбец "порядок обработки". Причем если порядок обработки например для цеха1 и цеха4 одинаковый, это значит, что данную операцию над деталью можно исполнять как в цехе 1, так и в цехе 4. Если деталь может быть сделана в любом цехе - значит у всех одинаковы1 "порядок обработки". Можно пойти еще дальше Сделать таблицу операций - обточка, фрезировка, шлифовка и прочая. И в таблице связи цеха и детали добавить столбец для операции. Вообщем фантазия разбежалась далеко Как видишь при моем варианте более высокая гибкость получается - цехов немерянно, легко расширять (показал на примере операций), деталь можно ограничить обработкой только в нескольких цехах, а не во всех 7 (как у тебя). |
| Автор: term 28.1.2004, 11:07 |
| Еще вариант: 1. изделия 2. детали 3. нормы времени и расценки с ссылкой на детали и цеха 4. цеха Если же таблица изделий содержит справочную информацию о всех возможных деталях для изделия, а реально выпускаемое изделие отличается от справочного, тогда понадобится еще две таблицы: 5. выпускаемые изделия (id_izdV, ссылка на справочное изделие id_izd) 6. соответствие деталей выпускаемому изделию (id_izdV, id_det) Если одна деталь может подходить для разных изделий, тогда понадобится 7 таблица для связи 1 и 2: 7. соответствие деталей справочному изделию. Если нормы времени и расценки будут меняться, тогда в 3 таблицу вводится поле <дата начала действия новых норм и расценок>. Старые нормы удалять не надо. Понадобится еще одна таблица 8 (по порядку после 6): 8. ссылки на нормы и расценки (ссылки на записи 3-ей таблицы). |
| Автор: Cashey 28.1.2004, 11:37 | ||
Если точно известно, что цехов ровно 7, то это можно упростить. И создать в таблице с деталями семь логических полей и заполнять их в соответсвие с цехом. |
| Автор: AntonSaburov 28.1.2004, 14:32 | ||
Может быть. Но я бы так не делал. Слишком жесткая связь получается. Мало ли что там произойдет. А что если деталь надо дважды, а то и трижды через один цех проводить в разном порядке ? Я имею в виду, что в первоначальной таблице нет возможности установить произвольный порядок обработки детали. А если технология изменится, а если вдруг цех разделят на два или сольют из двух один. По теории лучше бить на части. Хотя это как обычно только IMHO. |
| Автор: x404 31.1.2004, 21:39 |
| ------------------------------------------------------- AntonSaburov 1. Таблица для изделия включает в себя только описание изделия. И больше ничего. 2. Отдельная таблица для деталей. 3. Таблица для связи иделия и деталей, входящих в него. 4. Отдельная талица для списка цехов. ИД, наименование, месторасположение и прочая. 5. Таблица для связи детали и цеха. Вот тут можно поиграть вовсю. // ТУТ Я ЕЩЕ ДОБАВЛЯЮ СВЯЗКУ НА ЗАВОД И В ИТОГЕ : ЗАВОД-ЦЕХ-ДЕТАЛЬ Номер детали, номер цеха, норма для этого цеха. Это просто минимум. ------------------------------------------------------- Тут оказалось, что цеха все-таки разнесены по заводам(вроде их железно 3 штуки, но то как оказалось на самом деле с цехами не очень то хорошо и решил добавить еще таблицу ЗАВОДЫ. Или проще вводить ~60 штук цехов сразу в одну таблицу? 6. ЗАВОД И ище как сделать так, если деталь не будет изготавливаться на одном из заводов, а покупаться где-то на стороне.(применить ответ term?) |
| Автор: x404 1.2.2004, 10:12 |
| А что если сделать так: 1. Перечень изделий и деталей -ИД_Дет -Наименование изделия -Диаметр -Наименование детали -Количество 2.Завод1 -ИД -ИД_Дет(связка на 1-ю таблицу) -Норма времени1 (1 - это для первого цеха на этом заводе) -Расценка 1 -Норма времени2 (второй цех) -Расценка 2 ... 3. Завод2 -ИД -ИД_Дет(связка на 1-ю таблицу) -Норма времени1 (1 - это для первого цеха на этом заводе) -Расценка 1 -Норма времени2 (второй цех) --Расценка 2 -Норма времени3 -Расценка 3 ... И таблиц будет столько сколько заводов. И по мере ввода будут добавляться по 2 поля на каждый цех |
| Автор: AntonSaburov 2.2.2004, 11:18 | ||
Не нравится мне эта идея. IMHO лучше сделать столько таблиц, сколько есть реальных сущностей. А это: - изделие - детали + таблица для связи с изделиями - завод - цех (в нем поле, к какому заводу принадлежит) - ну и связь детали с цехом. Причем т.к. все цеха в одной таблице и каждый имеет свой ИД, то уже завод в принципе может быть не всегда использоваться - его всегда можно найти через цех. |