Unix Technical Forum

design question

This is a discussion on design question within the MySQL General forum forums, part of the MySQL category; --> hi there, I am a casual database tinkerer that has to build a new database. so please do not ...


Go Back   Unix Technical Forum > Database Server Software > MySQL > MySQL General forum

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 07-18-2008, 09:47 AM
robert rottermann
 
Posts: n/a
Default design question

hi there,

I am a casual database tinkerer that has to build a new database.
so please do not fall down laughing if I ask stupid questions ..

the problem at hand is that I want to create tables with the following
structure:

- suppliers
they produce/deal-with 0 to n products
- products
a product is produced/sold by 1-n suppliers
it can have 0-1 declaration
- declarations
these are product specsheets

my questions are now:
what indices and actions do I have to create to link these tables ?
in the following script created by by MySQL-workbench. there is the
table tblProducts_has_tblSupplier which is linked to both tblSupplier and
tblProducts by foreign keys.
How do I guaranty integrity when deleting a product or supplier??
do i have to do that using triggers?

thanks for your insigth
robert


SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

CREATE SCHEMA IF NOT EXISTS `energie` ;
USE `energie`;

-- -----------------------------------------------------
-- Table `energie`.`tblProducts`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `energie`.`tblProducts` ;

CREATE TABLE IF NOT EXISTS `energie`.`tblProducts` (
`idtblProducts` INT(11) NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(45) NOT NULL ,
`simplesystem` TINYINT(4) NULL DEFAULT 0 ,
`kompaktenergiezentrale` TINYINT(4) NULL DEFAULT 0 ,
`device_with_humidity_recovery` TINYINT(4) NULL DEFAULT 0 ,
`room_ventilator` TINYINT(4) NULL DEFAULT 0 ,
`comfort_regulation` TINYINT(4) NULL DEFAULT 0 ,
`heat_pump` TINYINT(4) NULL DEFAULT 0 ,
`outlet` TINYINT(4) NULL DEFAULT 0 ,
`air_dispersing_system` TINYINT(4) NULL DEFAULT 0 ,
`heat_exchanger` TINYINT(4) NULL DEFAULT 0 ,
`heat_recovery` TINYINT(4) NULL DEFAULT 0 ,
`humidity_recovery` TINYINT(4) NULL DEFAULT 0 ,
`sound_suppressor` TINYINT(4) NULL DEFAULT 0 ,
`pollen_filter` TINYINT(4) NULL DEFAULT 0 ,
`groundsregister` TINYINT(4) NULL DEFAULT 0 ,
`single_room` TINYINT(4) NULL DEFAULT 0 ,
`one_family_house` TINYINT(4) NULL DEFAULT 0 ,
`multi_family_house` TINYINT(4) NULL DEFAULT 0 ,
PRIMARY KEY (`idtblProducts`) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;


-- -----------------------------------------------------
-- Table `energie`.`tblDeclaration_vent`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `energie`.`tblDeclaration_vent` ;

CREATE TABLE IF NOT EXISTS `energie`.`tblDeclaration_vent` (
`idtblDeclaration_vent` INT NOT NULL AUTO_INCREMENT ,
`manufacturer` VARCHAR(45) NOT NULL ,
`name` VARCHAR(45) NOT NULL ,
`flowrate` INT NULL DEFAULT 0 ,
`humidity_recovery` INT NULL DEFAULT 1 ,
`energy_class` VARCHAR(1) NOT NULL ,
`energy_class_value` VARCHAR(10) NOT NULL ,
`hygiene_class` VARCHAR(1) NOT NULL ,
`noise_class` VARCHAR(1) NOT NULL ,
`audited_by` VARCHAR(45) NULL DEFAULT '' ,
`audited_date` DATE NULL DEFAULT NULL ,
`autition_report` VARCHAR(45) NULL DEFAULT '0-0-0' ,
`picture_name` VARCHAR(45) NULL DEFAULT '' ,
`remarks` TEXT NULL DEFAULT NULL ,
`reindex` BOOLEAN NULL DEFAULT 1 ,
`tblProducts_idtblProducts` INT(11) NULL ,
PRIMARY KEY (`idtblDeclaration_vent`) ,
CONSTRAINT `fk_tblDeclaration_vent_tblProducts`
FOREIGN KEY (`tblProducts_idtblProducts` )
REFERENCES `energie`.`tblProducts` (`idtblProducts` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = 'table with declaration data for ventilation'
PACK_KEYS = 1;

CREATE INDEX imanufacturer ON `energie`.`tblDeclaration_vent`
(`manufacturer` ASC) ;

CREATE INDEX ienergy_class ON `energie`.`tblDeclaration_vent`
(`energy_class` ASC) ;

CREATE INDEX ihygiene_class ON `energie`.`tblDeclaration_vent`
(`hygiene_class` ASC) ;

CREATE INDEX inoise_class ON `energie`.`tblDeclaration_vent`
(`noise_class` ASC) ;

CREATE UNIQUE INDEX imanufaturer_name ON `energie`.`tblDeclaration_vent`
(`manufacturer` ASC, `name` ASC) ;

CREATE INDEX iname ON `energie`.`tblDeclaration_vent` (`name` ASC) ;

CREATE INDEX fk_tblDeclaration_vent_tblProducts ON
`energie`.`tblDeclaration_vent` (`tblProducts_idtblProducts` ASC) ;


-- -----------------------------------------------------
-- Table `energie`.`tblSupplier`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `energie`.`tblSupplier` ;

CREATE TABLE IF NOT EXISTS `energie`.`tblSupplier` (
`idtblSupplier` INT(11) NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(45) NOT NULL ,
`extraname` VARCHAR(45) NOT NULL ,
`description` VARCHAR(45) NOT NULL ,
`address` VARCHAR(45) NOT NULL ,
`extraaddress` VARCHAR(45) NOT NULL ,
`zip` INT(20) NOT NULL ,
`city` VARCHAR(45) NOT NULL ,
`pob` INT(20) NOT NULL ,
`country` VARCHAR(45) NOT NULL ,
`language` VARCHAR(45) NOT NULL ,
`email` VARCHAR(45) NOT NULL ,
`url` VARCHAR(60) NOT NULL ,
`phone` VARCHAR(45) NOT NULL ,
`fax` VARCHAR(45) NOT NULL ,
`responsibleperson` VARCHAR(45) NOT NULL ,
`companylogo` VARCHAR(45) NOT NULL ,
PRIMARY KEY (`idtblSupplier`) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;


-- -----------------------------------------------------
-- Table `energie`.`tblProducts_has_tblSupplier`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `energie`.`tblProducts_has_tblSupplier` ;

CREATE TABLE IF NOT EXISTS `energie`.`tblProducts_has_tblSupplier` (
`tblProducts_idtblProducts` INT(11) NOT NULL ,
`tblSupplier_idtblSupplier` INT(11) NOT NULL ,
PRIMARY KEY (`tblProducts_idtblProducts`, `tblSupplier_idtblSupplier`) ,
CONSTRAINT `fk_tblProducts_has_tblSupplier_tblProducts`
FOREIGN KEY (`tblProducts_idtblProducts` )
REFERENCES `energie`.`tblProducts` (`idtblProducts` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_tblProducts_has_tblSupplier_tblSupplier`
FOREIGN KEY (`tblSupplier_idtblSupplier` )
REFERENCES `energie`.`tblSupplier` (`idtblSupplier` )
ON DELETE NO ACTION
ON UPDATE NO ACTION);

CREATE INDEX fk_tblProducts_has_tblSupplier_tblProducts ON
`energie`.`tblProducts_has_tblSupplier` (`tblProducts_idtblProducts` ASC) ;

CREATE INDEX fk_tblProducts_has_tblSupplier_tblSupplier ON
`energie`.`tblProducts_has_tblSupplier` (`tblSupplier_idtblSupplier` ASC) ;



SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT. The time now is 07:28 PM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0
www.UnixAdminTalk.com