* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download (referential integrity, SQL). - Purchase College Faculty Web Server
Survey
Document related concepts
Oracle Database wikipedia , lookup
Concurrency control wikipedia , lookup
Microsoft Access wikipedia , lookup
Relational algebra wikipedia , lookup
Entity–attribute–value model wikipedia , lookup
Extensible Storage Engine wikipedia , lookup
Microsoft Jet Database Engine wikipedia , lookup
Ingres (database) wikipedia , lookup
Clusterpoint wikipedia , lookup
Open Database Connectivity wikipedia , lookup
Microsoft SQL Server wikipedia , lookup
Transcript
Creating Databases for Web applications Making a table of table information. Reprise on database design. SQL. Classwork/Homework: Projects! Postings. <?php require("opendbo.php"); $query="show tables"; $rs=mysqli_query($link, $query); ?> <table border=1> <tr> <th> Table names </th> </tr> <?php $i = 0; while ($row=mysqli_fetch_array($rs)){ print("<tr> <td>"); $tablenames[$i] = $row[0]; $i++; print($row[0]); print("</td></tr>"); } print("</table>"); for ($j=0;$j<$i;$j++) { $query = "describe ".$tablenames[$j]; print ("<p><h2>" . $tablenames[$j]. " table </h2><table border=1>\n "); print ("<th> Field </th> <th> Type </th> <th> Null </th> <th> Key </th> \n "); $rt=mysqli_query($link,$query); while ($fi=mysqli_fetch_array($rt)) { print ("<tr> <td>". $fi['Field'] . "</td>\n "); print ("<td>".$fi['Type'] . "</td>\n "); print ("<td>".$fi['Null'] . " </td>\n "); print ("<td>".$fi['Key'] . " </td>\n "); print ("</tr>"); } print ("</table><p>"); } ?> my query on table info http://socialsoftware.purchase.edu/jeanine.m eyer/showtableinfo.php Challenge • What if you have a large set of queries for the user – one of my earliest assignments at a hospital: the abominable abdominal report –? Table of queries • If you have a large set of fixed SQL queries, you may make a new table: id description text 1 final diagnosis when presenting signs of appendicitis Select final.diagnosis from final, initial where initial.temp > 100 AND initial.pain = 'left' AND final.caseno = initial.caseno 2 initial potential ulcer cases Select * from initial where initial.pain = 'sharp' AND initial.temp < 100 …. Present to user Pick selection: Don't show the user the messy SQL description final diagnosis when presenting signs of appendicitis initial potential ulcer cases Produce responses • Make the query the SQL corresponding to the user's choice. • Display recordset in a table – Now, need generalized code that creates headings for tables and extracts names of fields 'on the fly' based on information in recordset. • php: – mysqli_fetch_field – mysqli_fetch_array <table> <?php require("opendbo.php"); $query="Select * from customers"; $result=mysqli_query($link, $query); $fieldnames= Array(); first for loop print ("<table border=1><tr>"); $nf = mysqli_num_fields($result); to set up for ($i=0; $i<$nf;$i++) { headers $fieldobj= mysqli_fetch_field($result); $fieldnames[$i]=$fieldobj->name; print ("<th>".$fieldnames[$i]."</th>"); } Second for print ("</tr>\n"); loop, in while while ($row=mysqli_fetch_array($result)) { loop, to extract print ("<tr>"); field data. for ($i=0; $i<$nf; $i++) { print ("<td>".$row[$fieldnames[$i]]."</td>"); } print("</tr>"); } mysqli_close($link); ?> </table> Note • http://socialsoftware.purchase.edu/jeanine. meyer/showCurrentCustomers.php • If you do [ever] show field names to your customers/clients/players/…, – you need to make them longer/better/etc. – Make sure database doesn't have blanks, etc. MySQL Rights • Possible to limit rights to specific users. – specific table or whole database – SELECT, INSERT, DELETE, UPDATE, DROP, CREATE, ALTER • NOTE: I don't know if your rights include right to use GRANT! • Limiting rights is to prevent unintentional errors as much as / more than not trusting certain people. • Your php code is main line of protection. SQL question Generate list of customers who had orders made in the summer of 2013. • Tables needed: – customers, orders – JOIN … ON condition the natural one: when id fields match • WHERE condition? – order date 'in' summer. Use BETWEEN • Any grouping (aka aggregation)? – No GROUP BY. Instead, use DISTINCT SQL question • SELECT DISTINCT cname FROM customers as c JOIN orders as o ON c.cid = o.cid WHERE o.date BETWEEN ‘201306-01’ AND ‘2013-08-31’ SQL question • What products were ordered by customers during Spring semester? • Strategy: – decide on tables and ON conditions – determine dates and set up WHERE condition using BETWEEN – use DISTINCT Left Join, etc. • Searching for what is there and what isn't there. – Left Join – NOT EXISTS. You can create (on the fly) a new table and check if it has any rows. – See http://explainextended.com/2009/09/18/not-invs-not-exists-vs-left-join-is-null-mysql/ php: checking for value • Using isset($_GET['guess']) is better than using $guess = @$_GET['guess']; if ($guess != null) { } php: strpos • Check if string is present in another string $n = strpos($answer,"SUNY"); if ($n>-1) { } • Alternative to regular expression php: explode • Breaks up string into an array if $listofstuff is "orange,apple,peach" $list = explode(",",$listofstuff); produces $list = ["orange","apple","peach"]; Database administrator • technical: working with software, including maintaining security, performance. Keeping aware of changes in products, new products. • administrative: working with technical staff AND other staff • specific business: knowing and keeping up-to-date with knowledge of this business. Internationalization & Localization How to make the php MySQL application work in different places • character sets (includes symbols, encodings for symbols, collations (ordering rules) • error messages (MySQL). Presumably your php code does error handling, also. • time zone • way to express dates See SET and SHOW commands Reprise: Data base design • Not obvious! • Need to determine the information and the location of information in one or more tables. • For each piece of information, what is the data type (representation) – different types of numbers – different types of character strings – MAY choose to incorporate media Reprise: Database table design Consider orders by customer • what information goes with the order and • what information goes with the customer • You do not want information associated with a customer to be repeated in every order! – wasteful of space – if (when) information changes, want to change in just one place Maintenance of database • Change fields in records • Delete records • Need to maintain referential integrity – Meaning that if a field in a table represents a foreign key (a reference to a record in another or this table), the referenced record exists! Referential integrity • Can handle in middleware (php) or MySQL or both. • MySQL – CREATE statements specify field as FOREIGN KEY. Add clause saying what to do upon deletion • ON UPDATE CASCADE • ON UPDATE SET NULL • ON UPDATE RESTRICT -- if there is a reference, an error will be generated. This is the default Database Transaction • refers to a sequence of operations on the database that are to be treated as a unit. Either they all go through or none go through. • php MySQL has commands to implement transactions. – Turn off the 'auto-commit feature' – check each query • if any problem, use mysqli_rollback() – when all okay, use mysqli_commit() Project presentation • Prepare and printout 1 pager: project name, members of team, abstract (1 paragraph summary), screen shot • Show (corrected/improved/finalized) design diagrams – DFD and ERD • Demonstrate • Show storyboard – how project is implemented in html and php scripts • Show and explain tricky parts of code. Like • SQL feature: stripped down regular expression – Wild card: % stands for 0, 1 or more letters • SELECT * FROM states WHERE sname LIKE ‘North%’ Two forms of INSERT • INSERT INTO customers VALUE (v1, v2,…vn) Where order of the values v’s is the order of the fields when the table was created • INSERT INTO customers (fname, lname, zipcode) VALUES (‘Groucho’,’Marks’,10000) QUIZ • Take W3Schools SQL quiz • http://www.w3schools.com/quiztest/quiztes t.asp?qtest=SQL Or put sql quiz into Google. Classwork/Homework • Keep working on projects • Postings (and respond to postings) on databases and related technologies in the news.