MySQL建议使用连接表构建数据库

时间:2013-03-09 16:08:42

标签: mysql sql

我想构建一个数据库,其中包含表中用户的信息:

User
 -username (primary key)
 -first_name
 -second_name
 -Image

在这个数据库中会有另一个表格如下:

Image
 -name (primary key)
 -file_name

我想要实现的目标

我希望每个用户都将Image作为其中一个字段。我明白这样做我必须连接表格。

到目前为止我所知道的

首先我应该将表定义为InnoDB,然后使用phpmyadmin单击relationView。

问题

如何使用phpmyadmin实现上述关系?

2 个答案:

答案 0 :(得分:0)

您应该在表Image上放置一个列,该列将在表User上引用,如果对于intance,用户可以有多个图像。前,

用户

  • 用户名(主键
  • 如first_name
  • SECOND_NAME

图片

  • 名称(主键
  • file_name中
  • userName(外键

翻译成DDL:

CREATE TABLE `User`
(
    userName VARCHAR(15),
    first_name VARCHAR(15),
    second_name VARCHAR(15),
    CONSTRAINT tb_pk PRIMARY KEY (userName),
    CONSTRAINT tb_uq UNIQUE (first_name, last_name)
);

CREATE TABLE `Image`
(
    name VARCHAR(15),
    file_name VARCHAR(75),
    userName VARCHAR(15)
    CONSTRAINT tb_pk PRIMARY KEY (name),
    CONSTRAINT tb_fk FOREIGN KEY (userName) REFERENCES `User`(userName)
);

答案 1 :(得分:0)

如果用户只有一个图像,则它是一对一的关系。一张桌子就可以做到一切。

这样的事情:

CREATE TABLE users (
  userId INT UNSIGNED NOT NULL AUTO_INCREMENT,
  userFirstName VARCHAR(80) NOT NULL,
  userSecondName VARCHAR(80),
  imageName VARCHAR(100) NOT NULL,
  PRIMARY KEY (userId)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

多个图像必须有一个用户,有一对多的关系。因此,您可以创建两个表和一个查找表。

像这样:

CREATE TABLE users (
   userId INT UNSIGNED NOT NULL AUTO_INCREMENT,
   userFirstName VARCHAR(80) NOT NULL,
   userSecondName VARCHAR(80),
   imageName VARCHAR(100) NOT NULL,
   PRIMARY KEY (userId)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE images (
   imageId INT UNSIGNED NOT NULL AUTO_INCREMENT,
   imageName VARCHAR(100) NOT NULL,
   PRIMARY KEY (imageId)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

查找表:

CREATE TABLE user_image ( 
   userId INT UNSIGNED,
   imageId INT UNSIGNED
) ENGINE=MyISAM DEFAULT CHARSET=utf8;