Mysql关系表怎么做 mysql关联关系

如何建立mysql表之间的关系MySQL创建关联表可以理解为是两个表之间有个外键关系,但这两个表必须满足三个条件
1.两个表必须是InnoDB数据引擎
2.使用在外键关系的域必须为索引型(Index)
3.使用在外键关系的域必须与数据类型相似
下面分别建两个表来说明一下:
Create TABLE IF NOT EXISTS `books` (
`book_id` smallint(6) NOT NULL auto_increment COMMENT ‘书籍编号',
`book_name` char(20) NOT NULL COMMENT ’书名‘,
mysql表的设计和关联问题这个问题问的好Mysql关系表怎么做,要弄一个表很容易,关键是表设计出来是否合理!
如果表设计的好 , 则会相当清晰 , 易于理解 , 后续开发上事半功倍,维护也方便Mysql关系表怎么做;如果设计的不好,则难以理解,维护困难 , 代价大 。
表与表之间的关系有三种:1.一对一,2.一对多,3.多对多
一对一的表,两表的属性实际上完全可以合并成一个表,共用一个主键即可;
一对多的表,可以设中间关联表,也可以将关联表并入“多”这头;若设独立关联表 , 则可引入“多”这头的主键作为其主键,也可另立主键,并将“一”和“多”两表的主键作为关联表的外键;
多对多的表 , 则必须设中间关联表 , 关联表设独立主键,并引入两个“多”头的表的主键作为关联表的外键 。
这是上述三种关系表在键处理上的基本原则 。
范式还是要遵循的,这套理论还是科学合理的 。不要相信反范式设计,反范式设计在规模庞大时,数据冗余多,编码及维护会变得困难,万一考虑漏掉的将导致数据不一致 , 甚至酿成灾难 。严格按照范式理论来设计数据库,将使你编码及维护时少操很多心 。
一般来说 , 先进行需求分析,然后画出数据流图,然后再根据数据流图画出ER图,然后再根据ER图创建各种表 。表是根据ER图来创建的,表设计的合不合理,关键是ER图抽像的合不合理 。在抽像ER图时,一般遵循这样的原则:
能用1对1的,就不用1对多;能用1对多的,就不用多对多,往简单化方向靠;
能当属性处理的,尽量当属性,而不是当实体处理去另立新表,这样可使问题简化 。
把意义相近联系紧密的属性放在一张表内,而不是拆在多张表中 。
看了一下你上述几张表,我认为不合理,户主是人,家庭成员也是人,把他们分在户主表和家庭成员表中不合理,他们是同一类的,宜合在一张家庭成员表中,并增加一个标志性字段,以指明哪个人是户主 。另外,宜建立一张地址表 , 以取代户主表,地址表中宜指明乡场镇、村巷道、几区、门牌号等与地址关系紧密的属性,把户籍、联系方式、户主等字段拿走,他们不是地址属性 , 这几个宜放在成员关系表中,户籍是人的属性 , 并非地址的属性,联系方式就更明显了,要联系的是人 , 而不是地址 。
很明显,地址和家庭成员是一对多关系,一个地址同时可以住着多个成员,而一个成员同时只能住一个地址 , 这样,设计成地址表和家庭成员表之后,要在家庭成员表中再加一个地址外键字段 , 把地址表的主键当作家庭成员表的外键填入,这样 , 成员表中的每个人都可以通过地址外键字段到地址表中找到其所住地址 。另外,成员表中也指明了哪个人是户主,也指明了每个人的户籍和联系方式,这些信息你都可以找得到 。
怎样在mysql中设计好友关系库表1.建立用户信息表
create table userinfo(id int(4) not null primary key, name varchar(20) not null unique key)engine=innodb default charset=utf8;
2.建立好友关系表
create table friend(uid int(4) not null, foreign key(uid) references
userinfo(id),fid int(4) not null, foreign key(fid) references
userinfo(id),unique key(uid,fid))engine=innodb default charset=utf8;
3.追加测试数据(满足uidfid条件)
insert userinfo values(1111---9999,'namea---namei’);
insert friend values(1111,4444---6666);
insert friend values(5555,6666---9999);
4.查询好友(5555的好友)
select * from friend where uid=5555 or fid=5555;
------- ------
| uid| fid|
------- ------
| 1111 | 5555 |
| 5555 | 6666 |
| 5555 | 7777 |
| 5555 | 8888 |
| 5555 | 9999 |
------- --------
5.问题:
5.1.userinfo中的id和name不为null,且不可重复:table设计可以做到
5.2.friend中的uid和fid均不为null,且都来自于userinfo的id:table设计可以实现
5.3.(uid,fid)组合不可重复:table设计可以完成
5.4.好友关系的表达时,(1111,5555)和(5555,1111)有冗余,也会出现(1111,1111)这样的数据:这个在table设计实现比较麻烦,需要在程序层面实现 , 也即增加限制条件uidfid即可
6.结果:
table设计达不到要求,或者较难达到要求时,可以在程序层面予以弥补 。
【Mysql关系表怎么做 mysql关联关系】关于Mysql关系表怎么做和mysql关联关系的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读