Persistence Layer In SaaS Application - relational-database

I have planned a SaaS Application for which we have selected Java for building the back end ,not yet selected which frameworks to utilize and I have opted to use either Ember JS with Bootstrap or Foundation with Bootstrap or Angular JS with Bootstrap for building the front end of the application.
I am confused with the persistence layer that either I should go for traditional Relational databases or should I go for 'Nosql Database' .
The idea is simple and straight ,offering Highly Configurable School Management System in SaaS model.The module at first I will be working on is Time and Attendance tracking of School/Universities/Colleges/Coaching Centers etc.As you can see that the policy of attendance (late,absent,present) varies from school to school ,university to university ,within university department to department ,within department teacher to teacher ,and coaching to coaching etc .And our application is not going to be deployed to their respective servers and will be hosted at cloud so one application running Accommodating dynamic policies running in isolation from the other.
My data is expected to grow with the period of time ,at fast pace since every school/coaching/institute will contain data of the following and following entities will be using the Application,Parent ,Student,Teachers,Principles,person who wants to take admission,Peons,etc
I have read answers to questions posted for the same kind of query and I found that people have used relational databases for this kind of application but they have built it 5-10 years back when there was no concept of Nosql databases ,All we knew was relational,object oriented databases so it would not be wrong to say that they opt the stack that was available at that time

I think that you should go for relational databases and I don't see any need of using Nosql databases ,the schema you will be having is static I am sure and you will be needed to maintain complex relationships as well.
Have a look at 'Multi tenant Architecture' ,and I would suggest you to use one database per client against one db per all clients.
Lets see what others would recommend you.

Related

Controlling access to data in MySQL, using Node, Express, Knex and Bookshelf

I am very new to database design and structuring - I have had no formal training and am purely self taught so I apologize in advance if this is a bland question.
I am designing a web app and am thinking to the future as users will have to be able to interact with each other sharing part of their data. I am wondering if there is a standard convention to controlling access to tables in MySQL and how I should generally tackle this problem with code written in NodeJS, ExpressJS, KnexJS, and BookshelfJS.
For example: a user will be matched with another user, both users will be able to see location, favourite book, etc but not able to see last name, birth date. etc.
How do I control this?
If anyone could point me to a few resources they have found helpful that would be great as well.
You seem to have learned a bit of MySQL and its access control features. Well, database user level access control IS NOT used by modern applications -- that could make resource management, like connection pools, very hard to implement. Usually SQL databases backing web applications have a single or, at most, two users: one for general data access and one for admin purposes.
The kind of access control you mentioned MUST be handled by your application code, YOUR code. There are libraries that help take care of authentication (e.g. passport) and authorization but ultimately it is YOUR CODE responsibility.
So my answer to your "How do I control this?" question is:
With YOUR code.
This is the whole point of Software Development.

Code first or Model first (Entity Framework/RIA Services)

We are developing LOB apps for many potential customers that are small or mid size, not large.
We will have to install the database for each new customer.
What do you think is the best approach for us, Model first (using edmx and using the wizzard to develop the model and metadata) or Code First.
We like the simplicity of Entity Framework/RIA Services, and we think that the Optimistic Concurrency is enough for our apps, but as the database must be installed from scratch in SQL Server (we won't use other database), we are not sure what approach is best for us.
As long as EF and the choice about edmx/code first I believe it's more a matter of personal preferences. Edmx model seems easier than code first however the designer is still a bit clunky even in VS2012 especially if you have 50+ entities. I've abandoned edmx since EF code first has become usable.
About WCF Ria Services I use it extensively in my LOB applications, even in a large one and most of the time it saves you a lot of glue code comparing to plain WCF. I'm sure you know about the well published features such as
server side filtering, paging and even grouping
Client code generation that ease the sharing of code between sl and the full clr
and many others, but maybe you're more interested in his limitations
you can't query from the client with a nested expression (i.e. Any) though you can always add a parameter to your query and apply the filter server side, but it's not quite the same
you can't directly expose many to many relations with silverlight (have however a look at M2M4RIA)
you must add the foreign key field to your model (to me it seems like DB leaking into the the model)
WCF Ria services do most of his work in the main thread (i.e. loading the DomainContext after a load/submitchanges)
If your application get big and you're thinking to split your domainservices/domaincontext, be aware that you'll encounter serious pain trying to submit the changes of the two domaincontext in an atomic transaction
Proxy generation will happen everytime you build your client and take (I think) longer than it should
Despite that I believe it's a good technologies for RAD and things may eventually turn better: Colin Blair has posted on his blog that him is pushing Microsoft in order to release WCF Ria as opensource, and this can really improve things given that Microsoft has killed Sl/Wcf ria development

ASP.NET MVC with MySQL as a framework choice for a website

I want to learn ASP.NET MVC, at the same time creating a website project that I have in mind.
The website I'm thinking of would be like displaying a list of pictures based on user's selection, by category, etc. So there will be drill-down on the links. Obviously, the list will come from the database.
Would MVC + MySQL be a good framework for this?
I am a C# programmer with web forms. Just want to learn a new technology.
It's not the gear, it's the programmer. It doesn't really matter which DB or approach you choose, as long as it suits your needs.
Good luck on making the foray into MVC. Once you get over the initial learning curve of understanding routing, controllers, actions and viewmodels you'll see the benefits.
MySQL, and most modern database platforms (relational or otherwise) for that matter, can handle your straightforward requirements of storing simple text data and associated blob objects.
While you're in a learning mode, though, I'd also take the opportunity to learn about interacting with a cloud-based blob data store which are more appropriate for unstructured binary data. My preference is Amazon's S3, but Azure and others exist, to store the binary image data. I would still store the transactional data in the relational database and MySQL would do a fine job there. (Amazon's RDS is MySQL 5.1 in the cloud for this too if scaleability is a requirement...)

Advice on Prototype for a Business Intelligence System

Our organisation lacks any data mining or analytical tools, so I'm trying to persuade them to implement a Business Intelligence solution using Microsoft SQL Server 2008 R2. They've asked for a prototype, so they can get a better idea of what Business Intelligence can do for them.
I'm assuming that the prototype will consist of -
A subset of data from a critical application
Integration Services (SSIS): Used to clean the data subset?
Analysis Services (SSAS): Used to create and maintain a dimensional model based on that data subset? Data Mining?
Reporting Services (SSRS): Used to create, maintain and update a 'dashboard' of reports.
I want to show how a Business Intelligence solution with data mining and analytic capabilities can help their organisation perform better.
As this is the first time I've done this, I'd value advice from other people on whether this prototype is realistic or not. And does anyone know of any easily-accessible real-life examples that I can show them?
my thoughts …
Don’t overestimate the size (in terms of time) of a new DWH project.
Start with something not very complex and well understood in terms of business rules.
The biggest problem we have had with new DWH projects/pilots (we are a DWH consultancy so have a number of clients) is getting management support of it. Often the DWH will be sponsored by someone in IT and there is no real board level support, so the project takes a long time to progress and it is difficult to get resources for it.
The best projects we have found are ones that have levels of support in three areas: Management (board level), IT and Business (preferably someone with good understanding of the business rules involved).
Have a look at Ralph Kimball’s Data Warehouse Toolkit which goes through different styles of DWH design for different industries. It is very good!
The tools I expect you would use (I’ve added a couple of technologies here)
SSIS (ETL tool) is used to Extract (from source systems) Transform (data into appropriate form the load) and Load (into Dim and Fact tables)
SSAS (OLAP tool) is used to create/process an OLAP cube. Warning: there is quite a large learning curve on this tool!!
SSRS (reporting tool) is used to create static and dynamic reports/dashboards.
MS Excel. There are free data mining models that can be added in and when connected to an OLAP cube which will allow very interesting DM to be performed.
Windows Sharepoint Services (WSS) (comes free with a Windows Server operating systems) to deploy your SSRS reports onto.
This is a good prototype scope in terms of technologies (if you are from the MS background), but the spread of technologies is very large and for one person coming in cold to them, this is perhaps unrealistic.
The most critical thing is to get the DWH star schema design correct (and there will be a number of solutions that are “correct” for any set of data), otherwise your OLAP cube design will be flawed and very difficult to build.
I would get a local DWH consultant to validate your design before you have built it. Make sure you give them a very tight scope of not changing much otherwise most consultants will “tinker” with things to make them “better”.
Good Luck!
It's been 2 years since the question was posted and of course, there has been updates in the world of business Intelligence. We now have couple of great tools for prototyping in the Microsoft Business Intelligence World:
- Power Query (Self Service ETL)
- Power Pivot.
Hope this helps someone just getting started w/ building prototypes.

When designing a new CMS database, what would be the most important features to add?

While this question asked something similar too, I'm interested in this from another angle. I'm not interested in the GUI part but in the database/domain part.
(My preference is SQL Server with C#/ASP.NET but this Q should be language agnostic.)
When designing a CMS system, data needs to be stored in tables and a business layer needs to provide access to this data. First of all, a user database with user roles, of course. A mailbox for private messages per user would be nice. Allowing users to set up their own profiles with images and eye-candy would make it even more interesting but let's not focus on the users.
What else should there be in the database for a CMS system? And how should it relate to the other tables?
My focus is to get a clear domain model to use as a basis for any CMS system. Something they all share in common. I'm only interested in the design, so I can later evaluate sseveral existing systems with the preferred domain model, to see which one matches the most ideal situation.
You need to decide what features your application needs, and what features beyond that you want to have in your application. From there you can work out what needs to go in your database. You're thinking about this backwards. The database supports the application, not the other way around (unless you're writing phpMyAdmin or similar!).
If it's a CMS for [I assume] dynamically maintaining a website, the first and foremost features should enable the users to:
Add/Edit/Remove pages (aka. nodes) - the structure of the site
Add/Edit/Remove menus, links - the navigation of the site
Add edit media (photos, video, etc.) - the content of the site
Then you can think of the other website-specific management features such as:
Managing products/customers if it's going to manage e-commerce websites
Various kinds of interactivity features -- comment/contact forms, etc.
A CMS is a big project to tackle, specially if you want to make it portable and/or reusable, expandable. I have already come through three versions of my own CMS -- first two versions in PHP and the latest one in .NET.
While design Database for CMS,must be care full about Product/content data tables,registered user data tables and UI related changes data tables.
UI related data is nothing but a themes,skin which is most important.
Most of the CMS application has developed as requirement comes.so most of the times need to break the relation ship in tables and normalization rule.
But if we careful about some basic db structure which is Content pages or content data tables,Product tables,User permission tables(if using aspnet tables then its better),Order management table(for e-commerce sites) etc.
As well as business layer doing most important role when some big changes comes in CMS Project.
Some times tables have a big changes which not effect on pages,need to change in business layer.
What you are asking is a technology question, which is not necessary related to the features the CMS itself has. My advice and the way I would approach it would be to use an ORM. The reason is that when you start designing the database you fall into the niche of DB concepts. The purpose of a CMS is to provide an easy way to manage content.
In this regard, extensibility is far more important than your database design and the user will not be able to see the database design. In short, start with an API, or if that is too much - just start with what you need to expose to the topmost layer. Then just somehow map this to the database without thinking about the structure itself. In this way, you would be concentrating on the problem you are solving rather than on the technology that might be needed to solve it. It feels more natural that way.