我要去的项目使用多个"墙壁"用于由用户创建的讨论。
我的问题涉及如何在MySQL数据库中建模。
将有一个名为" wall"包含创建它的人等信息,以及另一个名为" messages"包含" wall_id"的每条消息列,以区分它属于哪里,工作?
另外,"消息&#34> table使用wall_id作为索引的主键?或者是否有重复的数字对主键控没用?
我相对较新的数据库建模和正确的方式",我们非常感谢任何建议或可靠的帮助,以提高数据处理的效率和便利性。
答案 0 :(得分:1)
除了你所说的主键之外,你的方法确实是正确的方法。主键必须是唯一的。您可以将多个字段作为主键,但键本身必须是唯一的。
所以你会有以下表格。
CREATE TABLE `wall` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` INT(10) UNSIGNED NOT NULL,
`name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`id`),
INDEX `user` (`user_id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
CREATE TABLE `user` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
CREATE TABLE `message` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`wall_id` INT(10) UNSIGNED NOT NULL,
`user_id` INT(10) UNSIGNED NOT NULL,
`message` TEXT NOT NULL,
PRIMARY KEY (`id`),
INDEX `wall` (`wall_id`),
INDEX `user` (`user_id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
然后,您会将user
上的user_id
表与wall
上的wall_id
相关联。
答案 1 :(得分:0)
只需创建一个名为“Wall”的表格,并将wall_id作为主键内嵌
create table wall(wall_id int ,primary key(wall_id));
然后使用foriegn键创建“message”表,将wall_id作为
create table message(mes_belong_id int,primary key(mes_belong_id),wall_id int,foreign key(wall_id) references wall(wall_id));
然后将每条消息保存在您需要的同一墙ID下,并自动存储到消息中。如果您想要检索消息,只需使用wall_id。就是这样。
答案 2 :(得分:0)
基本上规范化表格
Users
User_id Name otherFields
Category
Category_id Cat_name
Walls
Wall_id User_id Cat_name
Messages
Message_id User_id Wall_id Message
基本的东西
情景1 因此,基于user_id显示所有特定用户的所有墙,并加入消息
情景2 根据category_id
显示特定类别的所有墙您可以根据您需要的其他内容对此进行扩展。
答案 3 :(得分:0)
我会使用你描述的两个表,一个用于墙,一个用于消息,墙的主键是自动增量整数。对于消息,再次使用自动增量整数作为主键,但它也应该将墙ID作为外键。
我最近构建了一个WordPress布告板插件,其工作类似于此,每个布告板都嵌入在页面中。这些页面已经由WordPress设置,因此只是添加一个布告栏表的情况,每个都有自己的主键,但也将WordPress页面ID称为外键。
您可能想要考虑获得一本关于数据库设计的正确书籍或阅读一些文章 - 它将帮助您永无止境。我使用了“数据库漫画指南”,它有点陈词滥调,但它确实帮助我了解如何构建关系数据库。我相信很多其他人也可以就这个问题推荐好书或文章。
答案 4 :(得分:0)
让我们逐一分解场景:
希望有所帮助。