Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Пакет Microsoft Office

  Все выпуски  

RFpro.ru: Пакет Microsoft Office


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

F®ost
Статус: Профессор
Рейтинг: 3406
∙ повысить рейтинг »
Black Cloud
Статус: Практикант
Рейтинг: 2391
∙ повысить рейтинг »
Kom906
Статус: 10-й класс
Рейтинг: 2004
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Помощь пользователю ПО / Пакет Microsoft Office

Номер выпуска:843
Дата выхода:28.09.2009, 13:00
Администратор рассылки:Ерёмин А.А., Мастер-Эксперт
Подписчиков / экспертов:545 / 335
Вопросов / ответов:1 / 2

Вопрос № 172482: Здравствуйте, уважаемые эксперты! Пожалуйста помогите ответить на мой вопрос: Я проектирую БД склада на СУБД Access: Товар на складе хранится в коробках. Каждая коробка имеет уникальный номер. В каждой коробке может хранится несколько тов...



Вопрос № 172482:

Здравствуйте, уважаемые эксперты!

Пожалуйста помогите ответить на мой вопрос:
Я проектирую БД склада на СУБД Access: Товар на складе хранится в коробках. Каждая коробка имеет уникальный номер. В каждой коробке может хранится несколько товаров, каждый товар может храниться в нескольких коробках. Склад состоит из ячеек - каждая ячейка имеет уникальный номер. В каждой ячейке может стоять только одна коробка. Коробки могут не стоять ни в какой ячейке. Ячейки могут быть пустыми.

У меня в итоге получилось 4 таблицы:
1. Товары (Номер товара-ключ.поле, НАзвание товара)
2. Коробки (Номер коробки - ключ.поле,Комплектовщик)
3. Ячейки склада (Номер ячейки - ключ. поле)
4. Товары в коробках (Номер коробки-ключ, Номер товара -ключ,Количество товара)

Таблицы 'Товары' и 'Коробки' связаны через промежуточную таблицу 'Товары в коробках' одно-многозначными связями.
А вот каким образом связать 'Коробки' и 'Ячейки' ; я не могу понять. По смыслу между этими таблицами должна быть связь один-к-одному (в одной ячейке может находиться только одна коробка). Но если добавлять из одной таблицы ключевое поле в другую таблицу в качестве внешнего ключа, то получается связь один-ко многим. Если реализовывать связь через промежуточную таблицу 'Размещение коробок' то связь между этими таблицами получается много-многозначная'. Пожалуйста, подскажите, как правильно решить этот вопрос.

Заранее благодарю,
Алексей

Отправлен: 22.09.2009, 16:30
Вопрос задал: Alexey Sergeev, Посетитель
Всего ответов: 2
Страница вопроса »


Отвечает Гуревич Александр Львович, 10-й класс :
Здравствуйте, Alexey Sergeev.

Мне кажется, судя по условиям задачи, получается, что таблица "Коробки" может иметь поле "Номер ячейки" (может иметь значение или быть NULL).

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

Если же есть строгое условие, что в одной ячейке должно стоять не больше одной коробки, то, наоборот, можно в таблице "Ячейки" создать поле "Номер коробки" (которая в ней стоит), а в таблице "Коробки" тогда поле "Номер ячейки" добавлять не нужно.

Если я что-то не точно понял вопрос, напишите, пожалуйста, уточнение в мини-форуме.

Успехов Вам!
-----
Труднее всего починить то, что никогда не ломается

Ответ отправил: Гуревич Александр Львович, 10-й класс
Ответ отправлен: 22.09.2009, 17:09

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 254523 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Филатов Евгений Геннадьевич, Студент :
    Здравствуйте, Alexey Sergeev.
    Может сделать немного по-другому? Это добавит дублирующуюся информацию в таблицы, но станет проще получать информацию о текущем состоянии.

    Yach ( Ячейка ) данные о текущих ячейках и их загрузке
    Kod ключ, код ячейки
    Kor код помещенной в ячейку коробки, если пустая =0
    Name наименование ячейки ( шифр, инвентарный номер или ч-л подобное, вдруг пригодится )

    Kor ( Коробок ) данные о коробках
    Kod ключ, код коробки
    Yach код ячейки, в которую помещен коробок, если никуда =0
    Kompl комплектовщик ( лучше код комплектовщика и добавить таблицу для них )
    Name наименование коробки ( шифр, инвентарный номер или ч-л подобное )

    Tov ( Товар ) справочник товаров
    Kod ключ, код товара
    Name наименование

    Skl ( Склад ) данные о паковке товаров в коробки
    Kor код коробки
    Tovar код товара
    Kol количество товара в коробке
    в теории, здесь хранится текущее состояние упа ковок, поэтому старые данные удаляются.

    я бы еще добавил справочник партий товара. это усложнит базу, но можно будет отследить какие старые товары не были использованы и почему вместо них использовались товары из нового поступления.
    Part ( Партия )
    Kod код партии
    Tov код товара
    Dpost дата поступления
    Kol количество
    Ostat остаток на складе ( можно придумать еще поля )

    тогда справочник склада немного изменится
    Skl ( Склад ) данные о паковке товаров в коробки
    Kor код коробки ( в теории, не может быть =0 , т.к весь товар расфасован в коробки, но ошибкой не будет - напишет "без коробки" если добавить пустые записи как написано в примечании ниже )
    Part код партии товара ( не может быть =0 )
    Kol количество товара в коробке ( не может быть =0 , иначе нужно удалить запись )

    За счет дублирования информации в двух таблицах о заполнении ячеек коробками и о загрузке коробок в ячейки, отпадает необходимость в связи между ними. Ключевые поля лучше делать длинное целое, но не счетчик, а заполнять это поле вручную ( сначала найти максимальное значение в таблице и новой записи присвоить на единицу больше ) .
    Еще было бы неплохо добавить "нулевые записи" в справочники ( значение ключа =0 ) :
    Yach ( 0 , 0 , "без ячейки" )
    Kor ( 0 , 0 , 0 , "без коробки" )
    Tov ( 0 , "не выбран" )
    чтобы при связи таблиц не выпадали строки, в которых второй ключ =0 ( если ячейка пустая или коробка не в ячейке )

    Не знаю как там прямо в Access, я работаю через клиентское приложение на VB. Вот примеры запросов

    Текущее состояние ячеек ( если ячейка свободна - во втором поле будет "без коробки" )
    select y.Name,k.Name from yach y inner join kor k on k.kod=y.kor

    Занятые ячейки
    select y.Name,k.Name from yach y inner join kor k on k.kod=y.kor where y.kor>0

    Текущее состояние коробок ( где находятся, может быть & quot;без ячейки" )
    select k.Name,y.Name from kor k inner join yach y on y.kod=k.yach

    Занятые коробки
    select k.Name,y.Name from kor k inner join yach y on y.kod=k.yach where k.kod in ( select kor from skl group by kor )

    Состояние коробок ( наличие в них товара и его количество )
    select k.Name, y.Name, t.Name, sum ( s.kol ) as [kol]
    from ( ( ( kor k inner join yach y on y.kod=k.yach ) inner join skl s on s.kor=k.kod ) inner join part p on p.kod=s.part ) inner join tov t on t.kod=p.tov
    group by k.Name, y.Name, t.Name
    это теоретически. реально запрос не проверял.

    Фактически, все селекты это дополнительные таблицы для удобства отображения данных ( вкладка View в базе ) .

    Если создатите базу и заполните данными, то можете отправить на адрес jones@hte.vl.net.ua и написать, какие еще запросы нужны - напишу в ответе.

    С уважением.

    Ответ отправил: Филатов Евгений Геннадьевич, Студент
    Ответ отправлен: 22.09.2009, 18:07

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 254526 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.9 от 25.09.2009

    В избранное