Komponent stok takip sistemi için veritabanı tasarımı

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
21,814
Komponent stok takip programı için veritabanı şema tasarımını tamamladım. Şemanın sağladığı özellikler:

1) Her komponent için model, açıklama, üretici, kategori, paket, konum, ve stok miktarı girilebiliyor. Bu alanlar arasında kategori ve konum, hiyerarşik bir yapıya sahip. Örneğin kategori için Yarıiletken -> Power MOSFET veya Dijital -> Lojik -> Multiplexer gibi sınırsız seviyeye sahip bir yapı oluşturulabiliyor. Aynı şekilde konum için de örneğin Kiler -> Dolap A -> Raf 2 -> Çekmece 28 gibi sınırsız seviyeye sahip bir yapı oluşturulabiliyor.

2) Her komponent ile sınırsız sayıda doküman ilişkilendirilebiliyor. Bu dokümanlar datasheet, kullanım kılavuzu, resimler, veya benzeri şeyler olabilir.

3) Sipariş kayıtları girilebiliyor. Örneğin Özdisan'dan bir gurup komponent mi alındı, bunların hepsi bir sipariş kaydı olarak saklanabiliyor. Buradaki amaç, hangi komponent nerelerden satın alındı? Hangi fiyata satın alındı? Hangi tarihte alındı? Bunun kaydını tutmak. Böylece bir komponenti kullanıyorsan ve sorun çıkarmadıysa, onu nereden aldığını bilip tekrar aynı yerden alma olanağı sağlamak.

Tasarım ile ilgili bir eksiklik veya yanlışlık görüyorsanız lütfen belirtin.


1691343926258.png
 
Bu tasarımı benim Linux makinada kurulu olan PostgreSQL veritabanına uyguladım. Şimdi, bu veritabanına erişip veri girişi, düzenlemesi, ve araması yapacak programı hazırlamak. Bildiğim C/C++ ile bu iş yapılabilir, ama grafik arayüzünü hazırlamak, veritabanı kütüphanelerinin API lerini öğrenmek vs çok uzun zaman alacak şeyler. Diğer seçenek de PHP kullanarak bir web arayüzü ile halletmek, ama bu benim bildiğin bir konu değil. Linux makinada Node.js çalıştırıp javascript ile de halledebilirim gibi duruyor. Javascript biliyorum az çok, ama Node.js hiç kullanmadım. PyQT5 kullanarak bu işi Python da yapmak da mümkün olabilir. Basit bir grafik arayüzü gerekiyor. Veri girişi ve arama yapması yeterli. Aklına başka bir yol gelen varsa belirtirse sevinirim.
 
  • Beğen
Reactions: nt
benim bir fikrim de var.
forum sunucusuna entegre çalışsa.
Benim halka açık bir depom olsa mesela o depoya kullanma ihtimalim az olan mcu modül entegreleri eklesem ihtiyacı olan görüp "ahmette varmış, kullanmıyormuş ahmetten isteyeyim" dese birbirimize yardımımız dokunur.
 
  • Beğen
Reactions: nt
Java'da yazabilirsin c++ den çok da farkı yok veritabanı çok kuvvetli. Jar exe dosyası haline getirip tüm işletim sistemlerinde çalıştırabilirsin.
CpatGPT ' ya yaptırsana :D bu projeyi yapamıyorsa harbiden çöp .
 
tablolara referans_id gibi bir alan daha eklerseniz iyi olur, ileriki zamanlarda tablolari iliskilendirirken cok faydasi olur, eger id alaniniz autoincrement ise silerken yada database yedeklerken ve geri yuklerken problem oluyor(mesela versiyon farkliliklari), carpik iliskiler ortaya cikiyor ve garip garip durumlar olusuyor, bu alani autoincrement yapmayin, kendi referans numaranizi urettirtin mumkunse database fonksiyonlari tercih edin, yani tablolari mumkunse hicbir zaman autoincremen bir alan ile iliskilendirmeyin, database olarak ne kullaniyorsunuz bilmiyorum ama bazilarinda prosedurel diller mevcut "C" gibi, bu diller ile tablolarin tum kontrollerini trigger fonksiyonlara yaptirabilirsiniz, hatta kullanici arayuze veriyi girdiginde verinin dogrulugunu database'e ekleyeceginiz trigger_function lar ile kontrol edebilirsiniz. kullanici olmadik bir veriyi silmeye kaltiginda yada update yaptiginda daha veri islenmeden exception urettirebilirsiniz, hatta bir zamanlar bir iddiam vardi, derdimki arayuz sadece makyajdir diger tum islemleri database'e yaptirabilirsiniz. Makyajda onemli tabi.
 
benim bir fikrim de var.
forum sunucusuna entegre çalışsa.
Benim halka açık bir depom olsa mesela o depoya kullanma ihtimalim az olan mcu modül entegreleri eklesem ihtiyacı olan görüp "ahmette varmış, kullanmıyormuş ahmetten isteyeyim" dese birbirimize yardımımız dokunur.

Web arayüzlü yapmak için bilmediğim altyapıları kullanmam lazım. PHP bilsem zaten doğrudan o şekilde ilerlerdim.
 
tablolara referans_id gibi bir alan daha eklerseniz iyi olur, ileriki zamanlarda tablolari iliskilendirirken cok faydasi olur, eger id alaniniz autoincrement ise silerken yada database yedeklerken ve geri yuklerken problem oluyor(mesela versiyon farkliliklari), carpik iliskiler ortaya cikiyor ve garip garip durumlar olusuyor, bu alani autoincrement yapmayin, kendi referans numaranizi urettirtin mumkunse database fonksiyonlari tercih edin, yani tablolari mumkunse hicbir zaman autoincremen bir alan ile iliskilendirmeyin, database olarak ne kullaniyorsunuz bilmiyorum ama bazilarinda prosedurel diller mevcut "C" gibi, bu diller ile tablolarin tum kontrollerini trigger fonksiyonlara yaptirabilirsiniz, hatta kullanici arayuze veriyi girdiginde verinin dogrulugunu database'e ekleyeceginiz trigger_function lar ile kontrol edebilirsiniz. kullanici olmadik bir veriyi silmeye kaltiginda yada update yaptiginda daha veri islenmeden exception urettirebilirsiniz, hatta bir zamanlar bir iddiam vardi, derdimki arayuz sadece makyajdir diger tum islemleri database'e yaptirabilirsiniz. Makyajda onemli tabi.

Veritabanı işinde yeniyim. PostgreSQL server kurulu Linux makinada. Şemayı tasarlamak için de DbSchema diye bir yazılım kullandım. Bu yazılımını güzel tarafı, doğrudan veritabanı sunucusu ile bağlantılı çalışıyor. Şemada yapılan her değişikliği server ile senkronize ediyor. Tablolara örnek data doldurabiliyorsun.

Verilerin silinme işi konusunda çok ayrıntılı bilgim yok, ama anladığım kadarıyla bu silme ilişkisini de şemada tanımlamak gerekiyor. Yani birşey silinince onunla ilgili olan ve silinmesi gereken şeyleri tanımlıyorsun. Artık o sorunları yaşadıkça ayrıntıları öğrenmiş olacağım.
 
o yazdigim islerin hepsi PostgreSQL de var, belayi bulmusun:) kolay gelsin.
 
Komponent ile ilgili dokümanları doğrudan veritabanı içerisinde saklamayı düşünüyordum. Esasında bu konuda ahali bölünmüş durumda. Kimisi bunun doğru olduğunu belirtiyor, kimisi dosyaların filesystem içerisinde saklanmasını ve veri tabanına dosyanın full isminin konmasını savunuyor.

Veritabanına onbinlerce komponent koymayacağım, o açıdan performans çok önemli değil. Ama veritabanındaki komponentler üzerinde geziniyorken, hızlı bir şekilde bir resmin pop-up şeklinde açılması faydalı olabilir. Bu açıdan bakınca performans önemli. O yüzden dosyanın kendisini değil, tam yolunu veritabanında saklayacağım.
 
Node.js ve bunun web uygulama bileşeni olan express.js ile ilerlemeye karar verdim. Öncelikle nodejs nin kurulumunu yaptım debian için.

Bash:
curl -fsSL https://deb.nodesource.com/setup_current.x | sudo -E bash -
apt-get update
apt-get install nodejs

Bu kurulumu yaptıktan sonra, node.js nin kendi genişleme modülleri için kullandığı npm paket yöneticisi de kurulmuş oluyor. Sonra npm kullanarak, node.js nin web uygulaması geliştirmeyi kolaylaştıran express.js modülünü kurdum. Burada önemli bir ayrıntı: node.js nin kendisi, debian paket yöneticisi olan apt ile ve root kullanıcısı tarafından kuruluyorken, express modülünü normal kullanıcı olarak kurmamız gerekiyor.

Bash:
npm install express
 
Sonra da express.js için "Hello world!" niteliğinde olan programı alıp node ile komut satırından çalıştırdım.

server.js:
const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => {
  res.send('Hello World!')
})

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

Bash:
node server.js

Sonra da chromium ile ilgili adresi açtım

1691603758830.png
 
Chatgtp'ye sordum, bana basit bir express programı yaz, veritabanına erişsin ve bir kayıt girsin diye. Birşey yazdı ama yazılanı ben anlamadım. En iyisi bir Node.js udemy kursu falan bulayım ... Javascript ve SQL bilgim sınırlı, biraz geliştirmem lazım.

JavaScript:
const express = require('express');
const bodyParser = require('body-parser');
const { Pool } = require('pg');

const app = express();
const port = 3000;

// Connect to PostgreSQL database
const pool = new Pool({
  user: 'YOUR_DATABASE_USER',
  host: 'YOUR_DATABASE_HOST',
  database: 'YOUR_DATABASE_NAME',
  password: 'YOUR_DATABASE_PASSWORD',
  port: YOUR_DATABASE_PORT
});

// Middleware to parse JSON requests
app.use(bodyParser.json());

// Simple endpoint to create a new row
app.post('/create', async (req, res) => {
  try {
    const { name, age } = req.body;

    // Assuming you have a table named 'users' with columns 'name' and 'age'
    const queryText = 'INSERT INTO users(name, age) VALUES($1, $2)';
    const values = [name, age];

    await pool.query(queryText, values);

    res.status(201).send('Row created!');
  } catch (err) {
    console.error('Error querying the database', err.stack);
    res.status(500).send('Server Error');
  }
});

app.listen(port, () => {
  console.log(`Server running on http://localhost:${port}`);
});
 
Bu tasarımı benim Linux makinada kurulu olan PostgreSQL veritabanına uyguladım. Şimdi, bu veritabanına erişip veri girişi, düzenlemesi, ve araması yapacak programı hazırlamak. Bildiğim C/C++ ile bu iş yapılabilir, ama grafik arayüzünü hazırlamak, veritabanı kütüphanelerinin API lerini öğrenmek vs çok uzun zaman alacak şeyler. Diğer seçenek de PHP kullanarak bir web arayüzü ile halletmek, ama bu benim bildiğin bir konu değil. Linux makinada Node.js çalıştırıp javascript ile de halledebilirim gibi duruyor. Javascript biliyorum az çok, ama Node.js hiç kullanmadım. PyQT5 kullanarak bu işi Python da yapmak da mümkün olabilir. Basit bir grafik arayüzü gerekiyor. Veri girişi ve arama yapması yeterli. Aklına başka bir yol gelen varsa belirtirse sevinirim.
bir web uygulaması ise django içine entegre edilebilir ve djangoda html ile arayüz yapılablir
ya da yine pythonda kivy var buda tüm platformlarda dokunmatık ekranlar dahil arayüz için çok uygun adroid windows mac farketmıyor
asıl sorun buradaki bir arayüz yok sanırım ve veri tabanı güvenliğide cabası arayüz konusunda daha fazla yardımcı olmak isterim eğer bu projenin reposu var ise beni yönlendirirmisiniz
 
Evet django ve python ile çok iyi yapılabilir. Ama python konusundaki bilgim çok başlangıç seviyesinde. Şimdiye kadar yazdığım ve çalışan tek program, seri porttan bir veri okuyup bir dosyaya kaydeden program :katil2:

Node.js nin şöyle bir faydası var: Hem client tarafında (tarayıcı), hem de server tarafında javascript kullanıyorsun. Ben de javascript'i az çok biliyorum.

İyi bir arayüz gerekli, evet, ama benim şu anda odak noktam, ileriye yönelik geliştirilebilecek sağlam bir veritabanı yapısı oluşturmak. Şu anda form bazlı basit HTML bir arayüz de olsa işimi görür. Veri girişi için bir form, arama yapmak için bir form olması yeterli. Diğer işlemler için bir SQL sorgu giriş ekranı olsa yeterli şimdilik.

eğer bu projenin reposu var ise beni yönlendirirmisiniz

Bir reposu yok. Ama dediğin mantıklı. Bunun için bir github reposu oluşturayım.
 
  • Beğen
Reactions: nt
tasarıma yazılara takılmadan arayüz konusunda sanırım yardıma ihtiyacım var :)
kullanım açısından neyin nerede olması gerekli yorumlarınızı bekliyorum.
Screenshot 2023-08-17 at 22-51-39 envo.png
Screenshot 2023-08-17 at 22-51-59 envo.png
 
Belki bomist'ten biraz esinlenebiliriz :)

1692307470756.png
 
  • Beğen
Reactions: nt
Burada bize lazım olan:

- Kategory (hiyerarşik bir liste)
- model numarası
- üretici
- Açıklama
- Paket
- Kaç tane var
- Saklama yeri (hiyerarşik bir liste)
- Datasheet

Eğer sonradan octopart entegrasyonu yaparsak, o zaman üretici, açıklama, paket, ve datasheet otomatik olarak gelecek.
 
  • Beğen
Reactions: nt
bu arayüz de popup eklenicek tablomuzun altı parça eklendikle uzun uzun bir tablo olucak arama butonları eklenebilir kolayca JavaScript de zorlanıyorum ama sorun değil boşluklar isimler butonlar özellikler elenebilir sanırım şimdi biraz daha doğru yoldayım
Screenshot 2023-08-18 at 00-58-33 envo.png
 

Çevrimiçi personel

Forum istatistikleri

Konular
5,847
Mesajlar
99,731
Üyeler
2,482
Son üye
ilker29

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top