CakePHP表中间和普通表

时间:2014-07-26 12:18:14

标签: php mysql cakephp foreign-key-relationship

我是CakePHP的初学者,我需要你对桌子的帮助。这种关系表有什么区别:

CREATE TABLE products (
  id int(11) NOT NULL auto_increment,
  category_id int(11) NOT NULL,  
  producer_id int(11) NOT NULL,  
  name varchar(25) DEFAULT '' NOT NULL,
  description text DEFAULT '' NOT NULL,
  PRIMARY KEY (id),
  KEY name (name)
);

CREATE TABLE categories (
  id int(11)NOT NULL auto_increment,
  name varchar(45) DEFAULT '' NOT NULL,
  description varchar(255) DEFAULT '' NOT NULL,
  PRIMARY KEY (id),
  KEY name (name)
);


CREATE TABLE producers(
  id int(11)NOT NULL auto_increment,
  name varchar(55) DEFAULT '' NOT NULL,
  PRIMARY KEY (id)
);

和中间人

CREATE TABLE categories (
  id int(11)NOT NULL auto_increment,
  name varchar(45) DEFAULT '' NOT NULL,
  description varchar(255) DEFAULT '' NOT NULL,
  PRIMARY KEY (id),
  KEY name (name)
);

CREATE TABLE producers(
  id int(11)NOT NULL auto_increment,
  name varchar(55) DEFAULT '' NOT NULL,
  PRIMARY KEY (id)
);

CREATE TABLE category_producers(
  id int(11)NOT NULL auto_increment,  
  category_id int(11) NOT NULL,
  producer_id int(11) NOT NULL,
  PRIMARY KEY (id)
);

CREATE TABLE products (
  id int(11) NOT NULL auto_increment,
  category_producer_id int(11) NOT NULL,  
  name varchar(25) DEFAULT '' NOT NULL,
  description text DEFAULT '' NOT NULL,
  timestamp timestamp(6) NOT NULL,
  PRIMARY KEY (id),
  KEY name (name)
);

根本区别是什么?哪个用?中间表的CRUD操作如何?

1 个答案:

答案 0 :(得分:0)

基本差异

category_producers表的目的是存储类别和生产者之间的多对多关系。

在第一个设计中,产品可以包含生产者和类别的任意组合。 在第二种设计中,category_producers表存储了生产者和类别的所有有效组合。

举个例子:

<强>分类

Electronics
Vehicles

<强>生产者

Sony
Toyota
Mitsubishi

通过第一个设计,您可以制作由Sony生产的车辆类别的产品。 使用第二种设计,您将使用有效组合填充category_producers表。

例如

Electronics  Sony
Vehicles     Toyota
Vehicles     Mitsubishi
Electronics  Mitsubishi

不允许使用Sony生产的车辆类别的产品。

使用哪种

这是您根据 业务要求做出的决定。

CRUD操作

您需要了解cakephp handles relations的具体方式,特别是hasAndBelongsToMany