0

我正在设计一个基本上必须存储两种元素的网络应用程序:帖子和容器(它们是帖子数组)

我已经完成了数据库,以便在容器的每一行中存储它所拥有的帖子数组的字符串化版本。

问题是,当我每次调用容器时删除帖子时,我都有帖子的 ID,我必须检查帖子是否还活着。

有一个更好的方法吗 ?例如构造容器表以保存指向实际帖子的“指针”?

非常感谢!

4

5 回答 5

2

如果我理解正确,你有一个一对多的关系:每个容器可以有很多帖子,但每个帖子都与一个容器相关。所以你的数据库设计应该反映这一点。

例子:

create table tbl_containers (
    containerId int unsigned not null auto_increment primary key,
    containerDescription varchar(100)
);
create table tbl_posts (
    postId int unsigned not null auto_increment primary key,
    containerId int unsigned not null,
    postText varchar(100),
    index idxContInd(containerId)
);

当您填写数据时,每个帖子都必须与一个容器相关联;换句话说,在可以输入帖子之前,必须有一个容器来容纳它,如果没有“合适”的容器,则应该在创建帖子之前创建它。

在您的数据在表中后,可以轻松查找帖子并删除它们,而与每个帖子所属的容器无关。

希望这可以帮助你

于 2012-11-12T17:05:11.680 回答
2

在两个表之间使用外键关系将是理想的。

首先,如果我正确理解您的数据之间的关系,您的Container表格将是包含与唯一 ID 相关的信息的表格。`Posts 表然后有自己的唯一 id、containerId 和帖子内容本身。

抽出来,看起来有点像这样。

Container
---
id

Posts
---
id | containerId | post

Container和之间的关系Posts假定为一对多;也就是说,一个容器可能有多个帖子,但一个帖子不能属于多个容器。如果您想要这种关系,您可能必须为此添加另一列到Posts.

于 2012-11-12T17:06:52.153 回答
1

这是支持我的评论的答案,该评论收到了一些积极的反馈:) 尽管您已经在那里有了答案。

您的 Container 将负责这些职位。所以就像一个篮子里装着很多东西。因此,对于每个帖子,都有一个容器 ID。对于容器表 - 容器 id 是主键。帖子表 - 帖子 ID 是主键。要拥有外键关系,您需要在您的帖子表中将您的容器 ID 设置为外键。如果这令人困惑 - 只需查看下面的表模式。如果要在删除容器时删除与容器相关的任何帖子,可以使用ON CASCADE DELETE父键(外键)删除任何孤儿(没有父母的孩子)。如果您希望拥有自动递增的 ID,则可以使用AUTO_INCREMENT否则只需将其删除。

请查看sql 语法以进一步了解。

CREATE TABLE tblParent (
    `CID` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `field2` varchar(100),
    `field3` varchar(100)
);

CREATE TABLE tblchild (
    `PID` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `PCID` int NOT NULL,
    `field2` varchar(100),
    `field3` varchar(100),
    FOREIGN KEY REFERENCE tblParent ('CID')
    ON DELETE CASCADE
);
于 2012-11-12T17:36:03.847 回答
0

我不确定我是否理解正确,但我会反过来这样做:你有你的 POST 表,其中有一个名为 container_ID 的字段。如果帖子被删除,那么 POST 表中的一行将被删除(包括指向其在 container_ID 中的父实体的指针)。在这种情况下,您可以在表之间创建外键关系,以保持数据库内的数据一致和关系完整。如果我误解了什么,请澄清..

于 2012-11-12T16:59:50.520 回答
0

您可以创建具有两个字段的第三个表,例如“container_id”和“post_id”。然后,当您删除帖子时,您会删除所有包含 post_id 的条目,容器也是如此。确保表 primary_key 由 two_fields 组成,以避免条目重复。

于 2012-11-12T17:01:33.657 回答