Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > Помогите с организацией БД.


Автор: x404 28.1.2004, 01:02
Помогите с организацией БД
Проблема в следующем(а может это и напрасные опасения, тогда просто скажите, что все нормально):
Есть ИЗДЕЛИЕ, оно включает в себя несколько ДЕТАЛЕЙ, каждое из которых имеет на изготовление свою норму времени и расценку. ДЕТАЛЬ можно изготовить на нескольких цехах(их 7 штук - цехов) и естественно различные нормы. Так вот как мне хранить эти цеха в одной табличке (как я и хочу, там просто названия цехов без всяких дополнительной информации по нему, хотя они и находятся в разных городах) или в различных таблицах? ИЗДЕЛИЕ хранить в отдельной таблице или нет? (хочу в этой же). thumbs-up.gif

На данный момент таблица мне представляется такойsad.gifбуду по русски писать)
----------------------
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 таблиц. Поехали дальше smile.gif

Также можно легко перейти к виду, когда деталь просто необходимо делать в нескольких цехах. Например сначала в первом, потом в четвертом, потом в десятом. Просто добавляется столбец "порядок обработки".
Причем если порядок обработки например для цеха1 и цеха4 одинаковый, это значит, что данную операцию над деталью можно исполнять как в цехе 1, так и в цехе 4. Если деталь может быть сделана в любом цехе - значит у всех одинаковы1 "порядок обработки".

Можно пойти еще дальше smile.gif
Сделать таблицу операций - обточка, фрезировка, шлифовка и прочая. И в таблице связи цеха и детали добавить столбец для операции.

Вообщем фантазия разбежалась далеко smile.gif
Как видишь при моем варианте более высокая гибкость получается - цехов немерянно, легко расширять (показал на примере операций), деталь можно ограничить обработкой только в нескольких цехах, а не во всех 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
Цитата
5. Таблица для связи детали и цеха. Вот тут можно поиграть вовсю.
Номер детали, номер цеха, норма для этого цеха. Это просто минимум.

Если точно известно, что цехов ровно 7, то это можно упростить. И создать в таблице с деталями семь логических полей и заполнять их в соответсвие с цехом.

Автор: AntonSaburov 28.1.2004, 14:32
Цитата
Если точно известно, что цехов ровно 7, то это можно упростить

Может быть. Но я бы так не делал. Слишком жесткая связь получается. Мало ли что там произойдет. А что если деталь надо дважды, а то и трижды через один цех проводить в разном порядке ?

Я имею в виду, что в первоначальной таблице нет возможности установить произвольный порядок обработки детали. А если технология изменится, а если вдруг цех разделят на два или сольют из двух один.

По теории лучше бить на части. Хотя это как обычно только IMHO.

Автор: x404 31.1.2004, 21:39
-------------------------------------------------------
AntonSaburov
1. Таблица для изделия включает в себя только описание изделия. И больше ничего.
2. Отдельная таблица для деталей.
3. Таблица для связи иделия и деталей, входящих в него.
4. Отдельная талица для списка цехов. ИД, наименование, месторасположение и прочая.
5. Таблица для связи детали и цеха. Вот тут можно поиграть вовсю. // ТУТ Я ЕЩЕ ДОБАВЛЯЮ СВЯЗКУ НА ЗАВОД И В ИТОГЕ : ЗАВОД-ЦЕХ-ДЕТАЛЬ
Номер детали, номер цеха, норма для этого цеха. Это просто минимум.
-------------------------------------------------------


Тут оказалось, что цеха все-таки разнесены по заводам(вроде их железно 3 штуки, но то как оказалось на самом деле с цехами не очень то хорошо confused.gif (их порядка 20 на каждом из заводов и внедрятся они будут по ходу) и теперь я насчет количества заводов все таки начал сомневаться).
и решил добавить еще таблицу ЗАВОДЫ. Или проще вводить ~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 лучше сделать столько таблиц, сколько есть реальных сущностей.
А это:
- изделие
- детали + таблица для связи с изделиями
- завод
- цех (в нем поле, к какому заводу принадлежит)
- ну и связь детали с цехом. Причем т.к. все цеха в одной таблице и каждый имеет свой ИД, то уже завод в принципе может быть не всегда использоваться - его всегда можно найти через цех.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)