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
包含每个用户的图像。如果是你的话,我会为它做三张桌子。