0

我正在进行的项目使用多个“墙”进行用户创建的讨论。

我的问题与如何在 MySQL 数据库中建模有关。

是否有一个名为“walls”的表包含诸如谁创建它等信息,另一个名为“messages”的表包含每条消息并带有一个“wall_id”列来区分它属于哪里,工作吗?

另外,“messages”表是否应该使用 wall_id 作为索引的主键?或者重复的数字对主键没有用处?

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

4

5 回答 5

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_idwallwall_id

于 2012-08-29T13:13:56.993 回答
0

让我们一一分解场景:

  1. 首先,您应该有一个以 user_id 作为主键的用户表。
  2. 那么你应该有一个墙桌。它的主键是 wall_id ,外键是 user 表中的 user_id ,因为每面墙都只属于一个 user 。user_id 也将是此表中的唯一键。
  3. 然后需要一个消息表。它将消息与message_id 的主键字段一起存储。
  4. 最后,您将需要一个 message_wall 表来存储消息属于哪个表的信息。这里 message_id , wall_id 将是外键复合主键

希望有帮助。

于 2012-08-29T13:17:21.470 回答
0

只需创建一个名为“Wall”的表并将 wall_id 作为您的主键

create table wall(wall_id int ,primary key(wall_id));

然后创建带有外键的“消息”表到 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。就是这样。

于 2012-08-29T13:13:07.737 回答
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 将所有墙显示到特定类别

你可以根据你需要的其他东西来扩展它。

于 2012-08-29T13:13:55.233 回答
0

如您所述,我将使用两张表,一张用于墙壁,一张用于消息,墙壁的主键是自动递增的整数。对于消息,再次使用自动递增的整数作为主键,但它也应该将墙 ID 作为外键。

我最近构建了一个 WordPress 公告板插件,它的工作原理类似,每个公告板都嵌入在一个页面中。页面已经被WordPress设置好了,所以只是添加一个布告栏表的情况,并且每个页面都有自己的主键,但也将WordPress页面ID称为外键。

你可能想考虑买一本关于数据库设计的好书或阅读几篇文章——它对你的帮助无穷无尽。我使用了“数据库漫画指南”,它有点老套,但它确实帮助我了解了如何构建关系数据库。我相信许多其他人也将能够推荐关于这个主题的好书或文章。

于 2012-08-29T13:15:37.590 回答