1

Тема: Обчилювальне поле Access із двох таблиць

Вельмишановне паньство!
Прошу Вашої допомоги.
Наявна невелика база (250) записів, 2 таблиці.

Табл1: id, Комірка, Артикул, Кількість, Залишок.
Табл2: id, НазваОбладнання, Серійний номер, Видано, Дата, Комірка

Необхідно вирахувати: [Табл1.Залишок]=[Табл1.Кількість]-[Табл2.Видано]

Microsoft описує про обчилслення у одній таблиці (це розумію), а от на двох таблицях не виходить.
Прошу Вашої допомоги!

Дякую!

2

Re: Обчилювальне поле Access із двох таблиць

Ви, схоже, неправильно розумієте сенс реляційних БД. Кожна таблиця має відповідати певній сутності - наприклад, товару, артикулу, накладній і т.д. Якщо одна сутність має якийсь стосунок до іншої - треба додавати зовнішній ключ (foreign key, FK, id іншої таблиці, якщо просто). Бажано, щоб при цьому інформація в БД не дублювалася -  у вас, схоже, має бути завжди залишок+видано = кількість; а це означає, що одне з полів є зайвим - бо можлива ситуація, коли будуть записані всі три значення без такого співвідношення, тобто буде порушення цілістності даних.
У вас є дві таблиці - в одній "видано", в іншій "кількість" та "залишок". Ці "видано" і "залишок" стосується одного об'єкта чи різних? Якщо одного - вони, швидше за все, мають бути в одній таблиці. Якщо ж це різні пов'язані сутності (наприклад, "видано" по кількох накладних, а "залишок" товару на складі) - то треба додати в накладні посилання на товар, і потім робити в запиті JOIN з кількох таблиць чи вкладений запит.

Якщо розкажете, що це і як воно має працювати - може, щось підкажемо.

Подякували: elrin, HetmanNet, leofun013

3

Re: Обчилювальне поле Access із двох таблиць

Загалом я розумію про що Ви пишете, зарас трохи модифікую базу і подумаю як звести "кількість"-"видано"-"залишок" в одну таблицю

4

Re: Обчилювальне поле Access із двох таблиць

Змінив зовнішні ключі, додав таблицю, обчислення виніс в одну сутність, поки все працює.
Набиваю дані. Дякую за оперативність!

5

Re: Обчилювальне поле Access із двох таблиць

elrin написав:

Змінив зовнішні ключі, додав таблицю, обчислення виніс в одну сутність, поки все працює.
Набиваю дані. Дякую за оперативність!

Навіщо залишок зберігати? Хіба то не є надлишкові дані?

Подякували: elrin1

6 Востаннє редагувалося elrin (04.10.2018 20:54:24)

Re: Обчилювальне поле Access із двох таблиць

HetmanNet написав:
elrin написав:

Змінив зовнішні ключі, додав таблицю, обчислення виніс в одну сутність, поки все працює.
Набиваю дані. Дякую за оперативність!

Навіщо залишок зберігати? Хіба то не є надлишкові дані?

доречне питання, але інфо від мене було не повне, мені дуже важливі залишки, оскільки це склад і і тут розраховується мін-макс, загалом система працює на 1С, але так безглуздо, що дістати якусь адекватну потрібну інфу неможливо, а оскльки БД еволюціонує, мені не вистачає даних, тож я вибрав один із її сегментів і пробую реалізувати на невеликій кількості записів свої маленькі задумки)))))

7

Re: Обчилювальне поле Access із двох таблиць

HetmanNet
Коли ви робите debug-білд вашої програми, там також купа надлишкової інформації.
Не кажучи уже про звіти. Якщо треба зібрати куб по великій базі за багато років, то чим більше буде уже розрахованих полів, тим краще. У таких випадках, різниця у швидкості виконання запитів, між повністю нормалізованою та повністю денормалізованою базою, може складати години проти кількох хвилин.

Подякували: elrin1

8

Re: Обчилювальне поле Access із двох таблиць

Torbins написав:

Коли ви робите debug-білд вашої програми, там також купа надлишкової інформації.

Про який білд йде мова ?
Переглянув свої debug-білди (на C++, C#), не знайшов там надлишкової інформації. Вся інформація, яка там сидить, є (або може бути) необхідною для дебагу програми.

Якщо ви про інформацію, яка не попадає в release, ну так на то він і debug-білд, щоб тримати купу додаткових даних.

Torbins написав:

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

Сильна заява. Перевіряти я її, звичайно, не буду. Але якось не віриться.

Подякували: elrin, varkon2

9

Re: Обчилювальне поле Access із двох таблиць

leofun01 написав:

Про який білд йде мова ?
Переглянув свої debug-білди (на C++, C#), не знайшов там надлишкової інформації. Вся інформація, яка там сидить, є (або може бути) необхідною для дебагу програми.

Якщо ви про інформацію, яка не попадає в release, ну так на то він і debug-білд, щоб тримати купу додаткових даних.

Ну от тепер уявіть собі, що вам треба шукати баги не в коді, а в базі. Як перевірити, що у базі усе правильно?

10

Re: Обчилювальне поле Access із двох таблиць

Torbins написав:
leofun01 написав:

Про який білд йде мова ?
Переглянув свої debug-білди (на C++, C#), не знайшов там надлишкової інформації. Вся інформація, яка там сидить, є (або може бути) необхідною для дебагу програми.

Якщо ви про інформацію, яка не попадає в release, ну так на то він і debug-білд, щоб тримати купу додаткових даних.

Ну от тепер уявіть собі, що вам треба шукати баги не в коді, а в базі. Як перевірити, що у базі усе правильно?

Власне, ідея несуперечності даних якраз у тому і полягає, що в базі не може бути неправильних даних.
Хоча кешування теж річ потрібна, не сперечаюся. Головне - чітко розуміти, де первинні дані, а де кеш.

Подякували: varkon, leofun012

11

Re: Обчилювальне поле Access із двох таблиць

Torbins написав:

Ну от тепер уявіть собі, що вам треба шукати баги не в коді, а в базі. Як перевірити, що у базі усе правильно?

Якщо "баги" вже попали в базу, то треба:
1) "пофіксити" записи в базі update'ами/delete'ами;
2) поставити тригери (можливо з транзакціями), які не допустять "баги" в майбутньому;
3) звільнити того, хто зробив такий срач в базі даних.

12

Re: Обчилювальне поле Access із двох таблиць

leofun01 написав:

Якщо "баги" вже попали в базу, то треба:
1) "пофіксити" записи в базі update'ами/delete'ами;

Як ви взнаєте де баги, не маючи можливості порівняти поточні дані з якимись іншими у базі? Наприклад з якимись контрольними сумами? Контольні суми, як і будь-який інший вид дублювання інформації, мав би відкидатися під час нормалізації бази. Але з чим тоді порівнювати?

leofun01 написав:

3) звільнити того, хто зробив такий срач в базі даних.

Вони усі уже давно звільнилися, і успішно передали свої "напрацювання" вам. А ви лише через місяць зрозуміли, як насправді усе погано, і шукати винних було уже пізно.

13 Востаннє редагувалося leofun01 (06.10.2018 11:23:26)

Re: Обчилювальне поле Access із двох таблиць

Torbins написав:

Як ви взнаєте де баги, не маючи можливості порівняти поточні дані з якимись іншими у базі?

Сама можливість порівняння даних в базі з надлишковими даними з тієї ж бази - це недопустимо (для розробника бази). Дані в базі мають бути правильними апріорі.

Torbins написав:

Наприклад з якимись контрольними сумами? Контольні суми, як і будь-який інший вид дублювання інформації, мав би відкидатися під час нормалізації бази.

Тільки давайте не будемо плутати контрольні суми з явними надлишковими даними.
Контрольні суми - це спосіб перевірити цілісність даних. Вони генеруються на основі самих даних і використовуються для порівняння з іншими контрольними сумами. З контрольних сум часто практично неможливо відновити самі дані.
A тримати в базі значення a, b, c, де c == a + b (завжди), - це просто абсурд і це явно надлишкові дані.

Torbins написав:

Вони усі уже давно звільнилися, і успішно передали свої "напрацювання" вам. А ви лише через місяць зрозуміли, як насправді усе погано, і шукати винних було уже пізно.

Я би вносив зміни в архітектуру бази. З такими "напрацюваннями" миритися не можна.