0
CREATE TABLE IF NOT EXISTS `domains` (
`domains_id` bigint(15) NOT NULL AUTO_INCREMENT,
`domains_url` varchar(255) NOT NULL,
PRIMARY KEY (`domains_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `domains_actions` (
  `domains_actions_id` int(15) NOT NULL AUTO_INCREMENT,
  `domains_actions_selmgec` int(15) NOT NULL,
  `domains_id` int(15) NOT NULL,
  `domains_actions_member` int(15) NOT NULL,
  `domains_actions_date` date NOT NULL,
  `actions_id` int(2) NOT NULL
  `domains_actions_value` int(15) NOT NULL,
  PRIMARY KEY (`domains_actions_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


CREATE TABLE IF NOT EXISTS `actions` (
  `actions_id` int(15) NOT NULL AUTO_INCREMENT,
  `actions_action` varchar(15) NOT NULL,
  PRIMARY KEY (`actions_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

したがって、適切に読んだ場合、likes/new/social のアクション テーブルが必要であり、これは domain_actions にリンクされます。

4

2 に答える 2

3

これらで何をしようとしているのかはわかりませんが、明らかに繰り返しデータがあります。type列を持つ 1 つのテーブルに統合する必要があります。おそらく使用してENUMいます。

CREATE TABLE IF NOT EXISTS `domains` (
  `domains_id` int(15) NOT NULL AUTO_INCREMENT,
  `domains_selmgec` int(15) NOT NULL,
  `domains_domain` int(15) NOT NULL,
  `domains_member` int(15) NOT NULL,
  `domains_date` date NOT NULL,
  `domains_type` int(2) NOT NULL,
  `type` ENUM('likes', 'new', 'social'),
  PRIMARY KEY (`domains_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

よりリレーショナルで正規化されたスキーマは次のようになります。

CREATE TABLE IF NOT EXISTS `domain` (
  `id` int(15) NOT NULL AUTO_INCREMENT,
  `selmgec` int(15) NOT NULL,
  `domain` int(15) NOT NULL,
  `member` int(15) NOT NULL,
  `date` date NOT NULL,
  `type` int(2) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `type` (
  `id` tinyint(1) NOT NULL AUTO_INCREMENT,
  `type` varchar(6) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `domainType` (
  `domain_id` int(15) NOT NULL,
  `type_id` tinyint(1) NOT NULL,
  PRIMARY KEY (`domain_id`, `type_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

この設計により、単一のドメインを保持し、それに複数のタイプを割り当てることができます。InnoDbこれらのタイプを適用するには、エンジンを変更して外部キー制約を作成する必要があります。

デモを見る

于 2013-01-22T22:17:33.190 に答える
1

すべての詳細を知らなくても、1つのテーブルを作成してから、TypeId別のテーブルを参照する列を作成します。

CREATE TABLE IF NOT EXISTS `domains` (
  `domains_id` int(15) NOT NULL AUTO_INCREMENT,
  `domains_selmgec` int(15) NOT NULL,
  `domains_domain` int(15) NOT NULL,
  `domains_member` int(15) NOT NULL,
  `domains_date` date NOT NULL,
  `domains_type` int(2) NOT NULL,
  `type_id` int(2) NOT NULL,
  PRIMARY KEY (`domains_likes_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

CREATE TABLE IF NOT EXISTS `types` (
  `type_id` int(15) NOT NULL AUTO_INCREMENT,
  `type_name` varchar(15) NOT NULL,
  PRIMARY KEY (`type_id`)
) ;
于 2013-01-22T22:19:33.390 に答える