-2

私は新会社のアプリケーション管理ビジネス(販売、サプライヤー、顧客、製品など)を開発しています。まず、データベースを作成する必要があります。以下のBDスキームが適切で最適化されているかどうかを教えてください。

CREATE TABLE IF NOT EXISTS `company` (
  id UNSIGNED INT NOT NULL auto_increment,
  `SIRET` varchar(50) NOT NULL,
  `nom` varchar(50) NOT NULL,
  `description` varchar(500) NOT NULL,
  `enable` ENUM('YES', 'NO') DEFAULT 'YES',
  `level` int(1) NOT NULL,
  PRIMARY KEY  (id),
  UNIQUE KEY SIRET (SIRET)
) ENGINE=INNODB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

// contactType can be one of the 3 values : email, phone, fax
CREATE TABLE IF NOT EXISTS `contactType` (
  id UNSIGNED INT NOT NULL auto_increment,
  `contactType` ENUM('email', 'phonenumber', 'faxnumber')
  `mobile` ENUM('YES', 'NO') default 'NO',
  PRIMARY KEY  (id),
  UNIQUE KEY type (contactType)
) ENGINE=INNODB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `contacts` (
  id UNSIGNED INT NOT NULL auto_increment,
  `SIRET` varchar(50) NOT NULL,
  `contactType` varchar(50) NOT NULL, // A reference to contactType just above
  `contactref` varchar(50) NOT NULL, // Phone number, fax number or email adress
  PRIMARY KEY  (id),
  UNIQUE KEY type (SIRET)
) ENGINE=INNODB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `customers` (
  id UNSIGNED INT NOT NULL auto_increment,
  `SIRET` varchar(50) NOT NULL,
  PRIMARY KEY  (id),
  UNIQUE KEY type (SIRET)
) ENGINE=INNODB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `supplier` (
  id UNSIGNED INT NOT NULL auto_increment,
  `SIRET` varchar(50) NOT NULL,
  PRIMARY KEY  (id),
  UNIQUE KEY type (SIRET)
) ENGINE=INNODB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `industry` (
  id UNSIGNED INT NOT NULL auto_increment,
  `industry` varchar(250) NOT NULL,
  PRIMARY KEY  (id),
  UNIQUE KEY type (activite)
) ENGINE=INNODB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `entreprisePerIndustry` (
  id UNSIGNED INT NOT NULL auto_increment,
  `industry_id` varchar(250) NOT NULL, // Chemical, Computer, Consulting, ...
  FOREIGN KEY (industry_id) REFERENCES industry(id) ON DELETE CASCADE,
  `SIRET` varchar(50) NOT NULL,
  PRIMARY KEY  (id),
  UNIQUE KEY type (industry_id)
) ENGINE=INNODB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
4

1 に答える 1

1

以下は、より良いDBを作成するのに役立ついくつかのTIPSです。

  • 外部キー制約を機能させる場合は、テーブルエンジンをからMyISAMに変更します。InnoDB
  • AUTOINCREMENTDataTypeはUNSIGNEDINTである必要があります。これにより、範囲が2倍になります。

    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT`
    
  • 許可された値のリストから列値を選択した場合は、dataTypeをに変更し ますENUM。この場合enable、はENUMdataTypelevelに変換できます。

    `enable` ENUM( 'y', 'n' ) NOT NULL DEFAULT 'y' COMMENT 'y:yes; n:no' `
    
  • 外部キー関係を追加する

    contactscontactTypecontactTypeid

    entreprisePerIndustryindustryindustryid

アップデート

基本的で最適化されたテーブル構造(AFAIK)を作成しました。

--
-- Table structure for table `tbl_company`
--
CREATE TABLE IF NOT EXISTS `tbl_company` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `siret` varchar(50) NOT NULL,
  `nom` int(11) NOT NULL,
  `description` varchar(250) NOT NULL,
  `enable` enum('y','n') NOT NULL DEFAULT 'y' COMMENT 'y:yes; n:no',
  `level` enum('1','2') NOT NULL DEFAULT '1',
  `last_updated_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Table structure for table `tbl_contact`
--

CREATE TABLE IF NOT EXISTS `tbl_contact` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `siret` varchar(50) NOT NULL,
  `contact_type` enum('email','phone','fax') NOT NULL DEFAULT 'email',
  `contact_ref` varchar(100) NOT NULL COMMENT 'Phone number, fax number or email adress',
  `last_updated_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `siret` (`siret`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

...
...

complate structure is here

于 2012-08-27T08:50:56.167 に答える