我正在设计一个基本上必须存储两种元素的网页应用程序:帖子和容器(这是帖子数组)如何关联两个MySQL表中的数据?
我已经完成了数据库,以便我在容器的每一行中存储字符串版本它拥有的帖子数组。
问题是,当我每次打电话给容器时都会删除一个帖子,我有帖子的ID,我必须检查帖子是否存在。
有没有更好的方法来做到这一点?例如构建容器表以将“指针”保存到实际的帖子中?
非常感谢!
我正在设计一个基本上必须存储两种元素的网页应用程序:帖子和容器(这是帖子数组)如何关联两个MySQL表中的数据?
我已经完成了数据库,以便我在容器的每一行中存储字符串版本它拥有的帖子数组。
问题是,当我每次打电话给容器时都会删除一个帖子,我有帖子的ID,我必须检查帖子是否存在。
有没有更好的方法来做到这一点?例如构建容器表以将“指针”保存到实际的帖子中?
非常感谢!
这里回答我的评论,收到一些积极的反馈:)虽然你已经有答案了。
您的容器将持有帖子。所以就像一个篮子里放着许多物品。 因此,每个帖子都有一个容器ID。对于容器表 - 容器ID是主键。帖子表 - 帖子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
);
这是完全的,并且完全回答我的问题,谢谢! – dpi
我不确定我是否正确理解了你,但是我会以相反的方式做到这一点:你有你的POST表,它有一个名为container_ID的字段。如果帖子被删除,那么POST表中的一行将被删除(包括container_ID中其父实体的指针)。在这种情况下,您可以在表之间创建外键关系,以保持数据库中的数据一致和关系完好。请澄清我是否误解了某些内容。
例如,您可以创建第三个包含两个字段'container_id'和'post_id'的表。 然后,当您删除帖子时,您将删除包含post_id的所有条目,对容器也是同样的东西。确保表primary_key由two_fields组成以避免条目重复。
这会在帖子和容器之间创建一个“多对多”的关系......如果这是主意,那就去...但如果这个想法是“一个容器包含许多帖子,但帖子只属于一个容器“,那么这会增加设计的复杂性 – Barranka
如果我理解正确,你有一对多的关系:每个容器可以有很多帖子,但每个帖子都与一个容器相关。所以你的数据库设计应该反映这个。
例子:
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)
);
当您填写您的资料,每一个岗位必须与容器相关联;换句话说,在可以输入帖子之前,必须有一个容器来容纳它,并且如果没有“合适的”容器,则应该在之前创建创建帖子。
将数据存入表格后,可以轻松查找帖子并删除它们,而不管每个帖子所属的容器。
希望这可以帮到你
在两张表之间使用外键关系将是理想的。
首先,如果我正确理解您的数据之间的关系,您的Container
表将保存与唯一ID有关的信息的表。然后,Posts表拥有自己的唯一ID,一个containerId和发布内容本身。
画出来,它看起来有点像这样。
Container
---
id
Posts
---
id | containerId | post
Container
和Posts
之间的关系被认为是一个到多;也就是说,一个容器可能有很多帖子,但是一个帖子不能属于许多容器。如果你想要这种关系,你可能需要为Posts
添加另一列。
您可以使用外键关系来关联这两个表。然后检查[级联删除](http://publib.boulder.ibm.com/infocenter/idshelp/v10/topic/com.ibm.sqls.doc/sqls118.htm):) – bonCodigo
@bonCodigo +1。您应该将您的评论发布为答案,并稍微扩展一下。 –