2012-11-12 15 views
0

我正在设计一个基本上必须存储两种元素的网页应用程序:帖子和容器(这是帖子数组)如何关联两个MySQL表中的数据?

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

问题是,当我每次打电话给容器时都会删除一个帖子,我有帖子的ID,我必须检查帖子是否存在。

有没有更好的方法来做到这一点?例如构建容器表以将“指针”保存到实际的帖子中?

非常感谢!

+4

您可以使用外键关系来关联这两个表。然后检查[级联删除](http://publib.boulder.ibm.com/infocenter/idshelp/v10/topic/com.ibm.sqls.doc/sqls118.htm):) – bonCodigo

+1

@bonCodigo +1。您应该将您的评论发布为答案,并稍微扩展一下。 –

回答

1

这里回答我的评论,收到一些积极的反馈:)虽然你已经有答案了。

您的容器将持有帖子。所以就像一个篮子里放着许多物品。 因此,每个帖子都有一个容器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 
); 
+0

这是完全的,并且完全回答我的问题,谢谢! – dpi

0

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

0

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

+0

这会在帖子和容器之间创建一个“多对多”的关系......如果这是主意,那就去...但如果这个想法是“一个容器包含许多帖子,但帖子只属于一个容器“,那么这会增加设计的复杂性 – Barranka

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) 
); 

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

将数据存入表格后,可以轻松查找帖子并删除它们,而不管每个帖子所属的容器。

希望这可以帮到你

2

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

首先,如果我正确理解您的数据之间的关系,您的Container表将保存与唯一ID有关的信息的表。然后,Posts表拥有自己的唯一ID,一个containerId和发布内容本身。

画出来,它看起来有点像这样。

Container 
--- 
id 

Posts 
--- 
id | containerId | post 

ContainerPosts之间的关系被认为是一个到多;也就是说,一个容器可能有很多帖子,但是一个帖子不能属于许多容器。如果你想要这种关系,你可能需要为Posts添加另一列。

相关问题