Jump to content

Foreign Keys


eanderson

Recommended Posts

I am fairly new at building databases, and am currently putting one together that works with PHP on my server. I run MySQL 5.1.30 and this is my current createtables.php file (which is still in construction):

 

$sql = "CREATE TABLE users( ".
  user_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, ".
  user_login VARCHAR(20) UNIQUE NOT NULL, ".
  user_pass CHAR(40) NOT NULL, ".
  user_firstname VARCHAR(20) NOT NULL, ".
  user_lastname VARCHAR(20) NOT NULL, ".
  PRIMARY KEY (user_id)); ";

  $result = mysqli_query($sql, $life);
  if (!$result)
  {
   die('Could not create table: ' .mysql_error());
  }
  echo "Users table successfully created\n";
  
$sql = "CREATE TABLE families( ".
  family_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, ".
  family_first VARCHAR(20) NOT NULL, ".
  family_last VARCHAR(40) NOT NULL, ".
  family_address VARCHAR(90) NOT NULL, ".
  family_city VARCHAR(40) NOT NULL, ".
  family_state CHAR(2) NOT NULL, ".
  family_zip MEDIUMINT(5) NOT NULL, ".
  family_home1 MEDIUMINT(3) UNSIGNED NOT NULL, ".
  family_home2 MEDIUMINT(3) UNSIGNED NOT NULL, ".
  family_home3 MEDIUMINT(3) UNSIGNED NOT NULL, ".
  family_cell1 MEDIUMINT(3) UNSIGNED NOT NULL, ".
  family_cell2 MEDIUMINT(3) UNSIGNED NOT NULL, ".
  family_cell3 MEDIUMINT(3) UNSIGNED NOT NULL, ".
  family_email VARCHAR(60) NOT NULL, ".
  family_emergency TEXT NOT NULL, ".
  PRIMARY KEY (family_id)); ";

  $result = mysqli_query($sql, $life);
  if (!$result)
  {
   die('Could not create table: ' .mysql_error());
  }
  echo "Family table successfully created\n";

$sql = "CREATE TABLE students( ".
  student_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, ".
  family_id INT NOT NULL, ".
  student_firstname VARCHAR(20) NOT NULL, ".
  student_lastname VARCHAR(40) NOT NULL, ".
  student_dob DATE NOT NULL, ".
  student_enrolldate DATE NOT NULL, ".
  PRIMARY KEY (student_id); ";
  INDEX (family_id); ";
  FOREIGN KEY (family_id) REFERENCES family (family_id); ";
  ) TYPE = INNODB; ";

  $result = mysqli_query($sql, $life);
  if (!$result)
  {
   die('Could not create table: ' .mysql_error());
  }
  echo "Students table successfully created\n";

$sql = "CREATE TABLE classes( ".
  class_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, ".
  class_type VARCHAR(20) NOT NULL, ".
  class_start  NOT NULL, ".
  class_day  NOT NULL, ".
  class_time  NOT NULL, ".
  class_duration
  PRIMARY KEY (student_id)); ";

  $result = mysqli_query($sql, $life);
  if (!$result)
  {
   die('Could not create table: ' .mysql_error());
  }
  echo "Students table successfully created\n";

$sql = "CREATE TABLE products( ".
  prod_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, ".
  prod_number VARCHAR(20) UNIQUE, ".
  prod_quantity INT NOT NULL, ".
  prod_cost DEC(6) NOT NULL, ".
  prod_msrp DEC(6), ".
  prod_price DEC(6) NOT NULL, ".
  prod_description TEXT, ".
  prod_distributor VARCHAR(25) NOT NULL, ".
  prod_lastedit DATE NOT NULL, ".
  prod_lastuser VARCHAR(20), ".
  PRIMARY KEY ( prod_id )); ";
  
  $result = mysqli_query($sql, $life);
  if (!$result)
  {
   die('Could not create table: ' .mysql_error());
  }
  echo "Product table successfully created\n";

 

 

What I'm having problems with are foreign keys. I know that some of my tables need to be linked to others, and tried to do so with the above code (See the students table):

 

$sql = "CREATE TABLE students( ".
  student_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, ".
  family_id INT NOT NULL, ".
  student_firstname VARCHAR(20) NOT NULL, ".
  student_lastname VARCHAR(40) NOT NULL, ".
  student_dob DATE NOT NULL, ".
  student_enrolldate DATE NOT NULL, ".
  PRIMARY KEY (student_id); ";
  INDEX (family_id); ";
  FOREIGN KEY (family_id) REFERENCES family (family_id); ";
  ) TYPE = INNODB; ";

 

When I start scripting, this is what I am keeping in mind:

 

For each STUDENT must be connected to 1 FAMILY

- Some FAMILIES can have more than 1 STUDENT

 

For each CLASS must have 1 (sometimes more than one) STUDENT

For each STUDENT can have 1 CLASS or more

 

 

Am I on the right track? I am having a hard time figuring out where the remaining foreign keys should be placed.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.