Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL建议使用连接的表构建数据库_Mysql_Sql - Fatal编程技术网

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

MySQL建议使用连接的表构建数据库,mysql,sql,Mysql,Sql,我想建立一个数据库,在表中保存有关用户的信息: User -username (primary key) -first_name -second_name -Image 在该数据库中,将有另一个如下表: Image -name (primary key) -file_name 我想要达到的目标 我希望每个用户都将图像作为其字段之一。我知道要做到这一点,我必须连接表 到目前为止我所知道的 首先,我应该将表定义为InnoDB,然后使用phpmyadmin单击relationView

我想建立一个数据库,在表中保存有关用户的信息:

User
 -username (primary key)
 -first_name
 -second_name
 -Image
在该数据库中,将有另一个如下表:

Image
 -name (primary key)
 -file_name
我想要达到的目标 我希望每个用户都将图像作为其字段之一。我知道要做到这一点,我必须连接表

到目前为止我所知道的 首先,我应该将表定义为InnoDB,然后使用phpmyadmin单击relationView

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

您应该在表
Image
上放置一列,该列将作为表
User
上的参考,如果出于维护目的,一个用户可以有多个图像。前,

用户

  • 用户名(主键)
  • 名字
  • 第二名
图像

  • 名称(主键)
  • 文件名
  • 用户名(外键)

翻译成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)
);

如果用户只有一个图像,则是一对一关系。一张桌子什么都可以

大概是这样的:

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 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;

如果images表不仅仅用于用户,那会怎么样?但也可能是其他用途的其他图像。@Svip实际上还有其他设计。我只是假设表
images
包含每个
用户的图像。如果是你的话,我会为它做三张桌子。