我正在设计一个基本上必须存储两种元素的网络应用程序:帖子和容器(帖子数组)
我已经完成了数据库,以便在容器的每一行中存储它所拥有的帖子数组的字符串化版本。
问题是当每次调用容器时删除帖子我都有帖子的ID,我必须检查帖子是否有效。
有更好的方法吗?例如,构造容器表以保存实际帖子的“指针”?
非常感谢!
答案 0 :(得分: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)
);
填写数据时,每个帖子都必须与容器相关联;换句话说,在输入帖子之前必须有一个容器来容纳它,如果没有“合适”的容器,则应该在创建帖子之前创建。
您的数据在表格中后,很容易查找帖子并删除它们,与每个帖子所属的容器无关。
希望这有助于你
答案 1 :(得分:2)
使用两个表之间的外键关系是理想的。
首先,如果我正确理解了您的数据之间的关系,那么您的Container
表将是包含与唯一ID相关的信息的表。然后`Posts表有自己唯一的id,containerId和post内容本身。
抽出来,它看起来有点像这样。
Container
---
id
Posts
---
id | containerId | post
Container
和Posts
之间的关系被认为是一对多;也就是说,一个容器可能有很多帖子,但是一个帖子不能属于许多容器。如果您想要这种关系,则可能需要为Posts
添加另一列。
答案 2 :(得分:1)
这里回答我的评论,收到一些积极的反馈:)尽管你已经有答案了。
您的容器将保留帖子。所以它就像一个篮子里面装着许多物品。
所以对于每个帖子,都有一个容器ID。对于容器表 - 容器ID是主键。帖子表 - 帖子ID是主键。要拥有外键关系,请在posts表中将容器ID设置为外键。如果这令人困惑 - 请参阅下面的表格架构。如果您希望在删除容器时删除与容器相关的任何帖子,您可以在父键(外键)上使用ON CASCADE DELETE
删除任何孤儿(没有父母的孩子)。
如果您希望自动增加ID,可以使用AUTO_INCREMENT
,否则只需删除它。
请查看sql syntax以获得进一步的理解。
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
);
答案 3 :(得分:0)
我不确定我是否理解正确但我会反过来这样做:你有一个POST表,它有一个名为container_ID的字段。如果帖子被删除,那么POST表中的一行将被删除(包括指向container_ID中其父实体的指针)。在这种情况下,您可以在表之间创建外键关系,以保持数据的一致性和数据库中的关系完整。请澄清我是否误解了某些事情。
答案 4 :(得分:0)
您可以创建第二个表,其中包含两个字段,例如'container_id'和'post_id'。 然后,当您删除帖子时,删除包含post_id的所有条目,对容器删除相同的内容。确保表primary_key由two_field组成,以避免条目重复。