Розробка мікро-облікової системи на lua, частина четверта. Модуль доступу до бази

Тепер розглянемо модуль, починаючи з самої бази. Вона являє собою набір таблиць з автоинкрементными полями:
image

Таблиця містить в собі перетин таких сутностей:
image
Журнал документів тут форма дублювання запиту на відображення. Як і всі відображення, швидко не оновлюється.
На першій схемі стрілками показані вектори перенесення даних з первинних ключів. Кожен з них має зв'язок з батьківським масивом і створює відповідну схему даних:
  • Телефонний довідник має три атрибути: порядковий номер, посилання на клієнта і номер телефону;
  • Довідник клієнтів має: порядковий номер і найменування клієнта;
  • Довідник позицій: порядковий номер, найменування позиції та її вартість;
  • Каталог документів: порядковий номер, посилання на клієнта, посилання на позицію і входять кошти.
Виходячи з цієї схеми, я прийняв рішення розмістити окремий модуль доступу до бази, змусивши виконавчі модулі формувати запит всередині себе. По-хорошому, потрібно буде зробити функцію для виклику загальних уявлень, поновлення записів і вставки, але я це зроблю пізніше, бо є ризик укрупнення бібліотеки і повторення функціоналу (і fetch, по хорошому, краще робити у виконавчому модулі):
Модуль database.lua:
local database = {}

function database.link()

driver = require "luasql.sqlite3"
env = driver.sqlite3()
db = env:connect("standart.sqlite3")
return db

end

return database

Тут у модулі створюється екземпляр модуля керування базою luasql.sqlite3, ініціалізується драйвер бази, потім йому згодовується сама база. Активація запиту у виконавчому модулі відбувається наступним чином:

base = require "database"
query = base.link() --[[ Виклик модуля бази і лінкування примірника запиту --]]


str = 'SELECT number, name FROM customer;'
thread = query:execute(str)
data = thread:fetch({}, "a") --[[ Формування запиту, виконання і парсинг даних --]]

while do data
print("| № " .. data.number .. " | " .. data.name .. " | ")
data = thread:fetch(data, "a") --[[ Отримуємо дані по рядках і виводимо також, як із звичайної таблиці в Lua --]]
end

За сім откланяюсь. У наступній статті розпишу роботу керуючого модуля.

P. S. Маленька прохання — якщо хочете передати зауваження з цього циклу статей, прошу попередньо прочитати статтю «Розробка мікро-облікової системи на lua, частина друга. Постановка завдання», в якій я вказую умови розробки програми та функції, які на неї покладаються. Враховуйте це.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.