Wątek przeniesiony 2015-03-30 22:36 z Bazy danych przez somekind.

Wybór programu do budowy rozkładu

0

Cześć.
Moim zadaniem jest stworzenie aplikacji, która będzie pomagać w układaniu rozkładu zajęć dla placówki edukacyjnej. Bez harmonogramowania.
Efektem końcowym ma być aplikacja, która posiada bazę danych z tabelami - uczniowie, nauczyciele, sale. Plan zajęć byłby układany ręcznie przez pracownika przez przeciąganie (drag & drop) "cegiełek" z nazwiskiem ucznia/nauczyciela (jeden nauczyciel zajmuje się jednym dzieckiem w jednej sali przez określony czas), jednak w razie konfliktu wyskakiwałoby odpowiednie ostrzeżenie i wówczas przyporządkowanie nie byłoby możliwe. Po przeniesieniu np. nauczyciela do ucznia w danej godzinie nie byłby on już dostępny.

W jakim środowisku (programie) będzie najwygodniej stworzyć taką aplikację?
Dodam, że jestem lekko zielonkawy w bazach danych ;)
Program powinien być darmowy. W internetach wyczytałem, że dobry do opracowania GUI bazy będzie MySQL Workbench, albo połączenie Visual Studio z jakimś programem do baz. Co polecicie?

0

OK, widzę, że nikt nie chce podzielić się swoimi wskazówkami.
Wobec tego przyjmijmy, że nie musi być to aplikacja - a cały mechanizm mógłby działać w przeglądarce, online.
Z przeciągania też rezygnuję, chcę to zastąpić czymś prostszym.

Czy takie rozwiązanie przeglądarkowe będzie łatwiejsze to zrealizowania (przyjmijmy, że jestem na początku nauki)?

0

Jeśli chodzi o porady - to raczej wybrałbym PostgreSQL-a (również darmowy), MySQL-a tylko wtedy, gdy nie ma innej opcji.

0

A dlaczego PostgreSQL - lepszy w tym przypadku do stworzenia bazy?

0

Zapytałeś

W jakim środowisku (programie) będzie najwygodniej stworzyć taką aplikację?

A w jakim języku potrafisz programować ?

0
matoex napisał(a):

A dlaczego PostgreSQL - lepszy w tym przypadku do stworzenia bazy?

Przede wszystkim bogatszy. MySQL się rozwija, może kiedyś dogoni funkcjonalnie choćby Postgresa, ale na razie jest to niezła zabawka, dla ludzi tworzących strony (bo takie coś udostępnia większość firm i tylko dlatego). Porządnie zrobione funkcje składowane, język podobny do tych stosowanych w komercyjnych bazach danych, co pozwala na stworzenie części bazodanowej na bazie, a to pozwala na pilnowanie integralności całości. Pewnie do Twojego problemu wystarczyłby SQLite równie dobrze, ale jak już chcesz ambitnie - naucz się dobrej bazy - będziesz musiał użyć prostej - tez dasz sobie radę.

0

Dzięki za wyczerpującą odpowiedź kaczus.
Najwięcej do czynienia miałem z językiem C i odrobinę C++.
A połączenie C# w Visual Studio i operowanie tam na bazie to dobry pomysł, czy lepiej jak najwięcej zrobić w programie SQL-owym?

0

Zależy od skomplikowania bazy - jeśli jest trochę zależności między tabelami, lepiej kontrolować je przez funkcje na serwerze, jeśli - a w tym wypadku tak powinno być - dlatego do tego zadania wystarczyłaby zwykła prosta baza SQLite - ale skoro ambitnie podszedłeś do zagadnienia i chcesz MySQL - to odradzam, tam za dużo jest jeszcze niedopracowań i zmian, szczególnie jeśli chodzi o tryby pracy i funkcje składowane i parę innych - to bardziej polecam Postgresql-a, gdyż z tych darmowych jest jednym z lepszych systemów. C# jest dobrym wyborem jeśli chodzi o GUI, jeśli ma powstać program pod windosem.

0

Ok, w miarę możliwości przeanalizuję jeszcze czego użyć - SQLite, MySQL czy PostgreSQL. Co do tego ostatniego to zachwalasz i być może się na to zdecyduję, obawiam się jednak o ilość pomoc, tutoriali itp. na ten temat - a dla mnie, na etapie, z którego startuję - to dość ważne.
Od razu zapytam: jak połączyć Visuala (C#) z PostgreSQL - co na ten temat możesz powiedzieć? Za pomocą niejakiego Npgsql?

Mój plan prac jest mniej więcej taki:

  1. Wybór programów i języka
  2. Budowa bazy
  3. Stworzenie systemu do układania rozkładu (GUI)
0

Tak korzystałem z Npgsql, tyle, że to było kilka lat temu - możliwe, że obecnie są lepsze narzędzia do łączenia z .Netem. Teraz korzystam z konkurencyjnych rozwiązań na desktopie i z webowych - tam są inne biblioteki, ale, jeśli logikę robisz w języku dostarczonym z bazą, to w zasadzie od strony GUI zostają proste zapytania do wywołania jedynie.

Dodano:
Widzę, że ktoś opisał to w miarę prosto tu: http://www.codeproject.com/Articles/30989/Using-PostgreSQL-in-your-C-NET-application-An-intr

2

Możesz też na przykład podejść do problemu jak człowiek, tj.
#Stworzyć sobie zestaw encji reprezentujących problem obiektowo.
#Na ich podstawie wygenerować bazę danych przy pomocy jakiegoś ORMa.
#Zapomnieć o piekle driverów i ręcznego klepania SQLi.

0

@n0name_l a możesz podać przykłady softu do wykonania tych kolejnych kroków ?

0

Visual Studio.

0

Ok... a jakieś hasła naprowadzające na materiały w sieci dotyczące Visala w tym kontekście ?

0
n0name_l napisał(a):

Możesz też na przykład podejść do problemu jak człowiek, tj.
#Stworzyć sobie zestaw encji reprezentujących problem obiektowo.
#Na ich podstawie wygenerować bazę danych przy pomocy jakiegoś ORMa.
#Zapomnieć o piekle driverów i ręcznego klepania SQLi.

Fakt, taki sposób brzmi zachęcająco i upraszczająco. Ciekawe też, że można to zrobić w Visualu.
Mógłbyś rozwinąć to bardziej?

1

Nie bardzo rozumiem co tu rozwijać, więc pokaże przykład.

  1. Klikamy New Project -> Console Application (na przykład).
  2. Instalujemy jakiegoś ORMa poprzez menedżer pakietów NuGet, np. Install-Package EntityFramework (w przykładzie będę używać SqlServera).
  3. Otwieramy połączenie do jakiejś bazy (pustej) i kopiujemy Connection String z właściwości.
  4. Piszemy kodzik:
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;

namespace ConsoleApplication1
{
  class Customer
  {
    public int Id { get; set; }
    public string Name { get; set; }
    public string SurName { get; set; }
  }

  class ProgramContext : DbContext
  {
    public ProgramContext()
      : base(@"Data Source=.\SQLExpress;Initial Catalog=Fun;Integrated Security=True")
    {

    }

    public DbSet<Customer> Customers { get; set; }
  }

  class Program
  {
    static void Main(string[] args)
    {
      var customers = new List<Customer>
      {
        new Customer { Name = "Alfred", SurName = "Nowak" },
        new Customer { Name = "Steve", SurName = "Nowak" },
        new Customer { Name = "Andrzej", SurName = "Kowalski" },
      };

      using(var db = new ProgramContext())
      {
        foreach(var c in customers)
          db.Customers.Add(c);

        db.SaveChanges();
      }

      using(var db = new ProgramContext())
      {
        var selectedCustomers = db.Customers.Where(c => c.Name == "Alfred").ToList();
        foreach(var c in selectedCustomers)
          Console.WriteLine("{0} {1}", c.Name, c.SurName);
      }

      Console.ReadKey();
    }
  }
}
  1. Cieszymy się wynikiem, tadam:
    fc84f17f1c.png

[Jakby ktoś był mega ciekawy czemu podwójnie, to 2x odpaliłem aplikację].

1 użytkowników online, w tym zalogowanych: 0, gości: 1