讨论MySQL数据库结构

时间:2012-08-29 13:05:07

标签: php mysql database model

我要去的项目使用多个"墙壁"用于由用户创建的讨论。

我的问题涉及如何在MySQL数据库中建模。

将有一个名为" wall"包含创建它的人等信息,以及另一个名为" messages"包含" wall_id"的每条消息列,以区分它属于哪里,工作?

另外,"消息&#34> table使用wall_id作为索引的主键?或者是否有重复的数字对主键控没用?

我相对较新的数据库建模和正确的方式",我们非常感谢任何建议或可靠的帮助,以提高数据处理的效率和便利性。

5 个答案:

答案 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)

让我们逐一分解场景:

  1. 首先,您应该拥有一个user_id作为 主键 的用户表。
  2. 然后你应该有一张墙桌。它的 主键 将是wall_id,而 外键 将是来自用户表的user_id,因为每个墙只属于一个用户。 user_id也将是此表中的唯一键。
  3. 然后需要一个消息表。它将存储消息以及主键字段message_id
  4. 最后,您需要一个message_wall表来存储哪条消息属于哪个表的信息。这里的message_id,wall_id将是 外键 复合主键
  5. 希望有所帮助。