Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create view or use innerjoins?

I have a normalized database, with foreign keys/primary keys giving one to many databases.

I plan to access this database with PHP for the basic frontend/backend display. Now, my question comes from these two exampled queries:

CREATE VIEW `view` AS
  SELECT
    functiondetails.Detail,
    functionnames.ID,
    functionnames.FunctionName,
    functionnames.Catogory
  FROM functiondetails
    INNER JOIN functionnames ON functiondetails.AsscID = functionnames.ID

or

SELECT
  functiondetails.Detail,
  functionnames.ID,
  functionnames.FunctionName,
  functionnames.Catogory
FROM functiondetails
  INNER JOIN functionnames ON functiondetails.AsscID = functionnames.ID

There is no error within the query as i've ran both without fail, but my overall question is this:

if I plan to constantly reference alot of information from my database. Wouldn't it be easier to create a view, which will then update all the time with the newly added information, or would it be in better practice to have the second query on my actual php.. Example:

$Query = $MySQli->prepare("
  SELECT
    functiondetails.Detail,
    functionnames.ID,
    functionnames.FunctionName,
    functionnames.Catogory
  FROM functiondetails
    INNER JOIN functionnames ON functiondetails.AsscID = functionnames.ID
")
$Query->execute();
$Results = $Query->fetch_results();
$Array = $Results->fetch_array(MYSQLI_ASSOC);

Or to select from my view?

$Query = $MySQLi->prepare("SELECT * FROM `view`");
$Query->execute();
$Results = $Query->fetch_results();
$Array = $Results->fetch_array(MYSQLI_ASSOC);

So which one would be a better method to use for querying my database?

like image 726
Daryl Gill Avatar asked Aug 26 '13 11:08

Daryl Gill


1 Answers

Views are an abstraction layer and the usual reason for creating an abstraction layer is to give you a tool to make your life easier.

Some of the big advantages to using views include:

  1. Security
    You can control who has access to view without granting them access to the underlying tables.

  2. Clarification
    Often times, column headers aren't as descriptive as they can be. Views allow you to add clarity to the data being returned.

  3. Performance
    Performance wise, views do not negatively hurt you. You will not, however, see a performance gain by using views either as MySQL does not support materialized views.

  4. Ease in Coding
    Views can be used to reuse complex queries with less room for user error.

  5. Ease of Management
    It makes your life easier whenever your table schema changes.

    For example, say you have a table that contains homes you have for sale, homes_for_sale, but later on you decide you want that table to handle all homes you've ever had for sale/have for sale currently, all_homes. Obviously, the schema of the new table would be much different than the first.

    If you have a ton of queries pulling from homes_for_sale, now you have to go through all your code and update all the queries. This opens you up to user error and a management nightmare.

    The better way to address the change is replace the table with a view of the same name. The view would return the exact same schema as the original table, even though the actual schema has changed. Then you can go through your code at your own pace, if needed at all, and update your query calls.

like image 141
Michael Irigoyen Avatar answered Sep 30 '22 17:09

Michael Irigoyen