PySide/Python for front-end.
DB: you pretty much have the choice between relational (MySQL, Postgres, MS SQL Server) and document based (MongoDB, CouchDB, etc.)
Database pretty much depends on the following:
- will your schema grow - i.e. will different records have different amounts and types of information? If yes, choose a document based db (mongo, couch, etc.), otherwise SQL
- will you need transactions (i.e. all or nothing operations) while you update multiple tables / documents? This can be difficult to figure out, especially if you’re concerned about consistency and concurrency. i.e. How important is consistency - does it always have to be 100%? How likely are people getting into each other’s way? e.g. 10000 people using the system concurrently will more likely create colliding requests than 10. A banking system may need to be more consistent all the time than a small pipeline for a vfx/games studio where (in the worst case) conflicts can be resolved by talking to the guy next to you. For this problem, you will have to define the risk you want to live with and see how it translates into engineering effort.
- what sort of queries will be run? i.e. what questions does your database need to answer? Some queries can be very easy to write in one system and very difficult to write in another.
To answer those questions, you should define features for the end-user - what do they want to accomplish? This will tell you what data entities you will have to handle (e.g. information about shots, users, scenes, revisions, statuses, etc.) and what information you will have to get about them (i.e. your queries).
When choosing a database, I wouldn’t worry much about speed. Not at the low amount of number of users and concurrency that a typical single-studio pipeline experiences when it comes to database access. Think: number of users times pipeline interactions per second (you won’t hit 10000 or more )
Personally, I found MongoDB and MariaDB both very good (and free choices) for databases.
Get some basic Docker knowledge and you can quickly launch different database instances by using the official MariaDB or MongoDB Docker images, to create and re-create database instances as required for development.
Advanced tip: Clients should not interact directly with the database server. This “close coupling” prevents you from efficiently fixing and extending the database, as every database change will require you to update and re-distribute your client. A better approach would be a light-weight webserver (e.g. Python / WSGi) to talk to clients via HTTP, and then translate the HTTP requests into database interactions.
edit: spelling/grammar