数据库建表的4个小问题,给10分!

是一个论坛的如下三个表:(注:用户名不能重复)
(1) 用户信息表:用户名,密码,确认密码,email
(2) 帖子信息表:发帖ID,用户名,标题,内容
(3) 回复信息表:回复ID,发帖ID,标题,内容
把“用户名(varchar),发贴ID(int),回复ID(int)做为主键”,这其中有几个问题不明白
1,用户名是varchar而ID是int类型,存储类型不一样我能把ID做为用户名的外键联接起来么?
2,表和表之间的关系是通过建主外键来实现的吧,那我要是先删用户名这个主键再删ID的这个外键内容成么?不是说得先删外键再删主键么。。可实际中肯定是直接删用户名啊??
3,我的2,3表中都存有和上一个表相同的字段(2表中的用户名,3表中的主贴ID)这两个和上表相同的字段有什么用?不冗余么?(注:此表为我引用)
4,额外加5分! :上面的密码要用什么类型存储。。varchar(6)?么,可是实际上我们输入的时候最多只能输入6位数么。。密码 黑点显示的代码是什么。。

1.当然可以。不过企业开发其实用到外键关联的较少了。不然你的帖子信息的主键就变为双列值了。还不如存取用户信息,等需要使用时再调用一次查询就是了。
2.如果1你确定使用了主键,那么你删除用户表中信息时,帖子里将会出现错误值。所以先删外键,所谓帖子中的值,即包含该用户的值。实际中怎么就直接删除用户名?如果你做了外键,那么数据库是会报错的,报错原因是帖子中提到的用户不存在。 又回到1问题,实际过程确实是删除用户,我们可以不管帖子。那是因为用户信息可能被冗余存储了。或者没有作外键关联。
3.你查看帖子的时候肯定想知道谁发的吧,所以给个用户id,可以进行查询呀,在一个页面中显示。你看帖子回复,肯定也要知道什么帖子吧,这就需要帖子的id了。这是冗余么?这必须要的,你先单独分开看,然后想想就知道这个必须加了。
4.恩 varchar(6),完全可以的。没有的数据库中就会显示空。比如说存取一个3位密码。相当于给它6个空间,它只用了3个,那么查找时当然可以只查找三个了。不足的不用管它,数据库会以小的匹配。 密码黑点是一种显示方式,比如输入框的类型为password不就可以了。实际上存取的是真实的密码。如果你想将它显示出来,你就把显示格式改为“text”不久OK了。
附录:楼主好思索,但是思考不深,而且基础也没有很好的打好。但是这没关系,多思考,从各个方面去想就好了。
我所讲的只是我认为的,你的问题问得我只能猜测着是什么问题。所以回答错误请见谅。追问

请问如何把两张表建立起联系。。就是说我要是删了表1里的用户名,表2里的该用户发的贴子和回复的帖子也一起删了,我不知道应该怎么建联系。。。我一直以为要是让两个表联系起来是通过主外键来实现的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-06
1 将用户信息表里的用户作为主键 将帖子信息表里的用户作为外键(另外 密码和确认密码有区别吗,如果没有就不需要确认密码这个字段)
2 必须先删除外键 再删主键 也可以在删除主键的时候用cascade关联删除外键
3 2,3表可以合并成一个,ID,父ID,用户名,标题,内容 如果是主帖则父ID设置为0或者-1等约定的数值即可
4 密码的黑点是UI编程实现的与数据库无关
相似回答