我不确定"子表"是适当的术语,所以让我解释一下。
我正在设置一个包含多个项目的网站,现在我在我的MySQL数据库中创建了两个独立的表:general
和platforms
。
我现在的目标是将每个项目的数据拆分成这两个表,到目前为止工作正常,但我现在的问题如下:
platforms
表具有以下结构:
ID
Name
URL
我希望通过ID
跟踪每个项目,因此ID
item #1
在所有表格中应该相同。
现在,如果我为item #1
说了3个不同的平台,我会在platforms
表格中添加每个元素,但他们的ID
不要#&# 39; t匹配。
如果我有多个项目,每个项目都有多个平台,那么它将开始变得非常混乱。
是否可以有一个看起来像这样的表?
ID
Name
URL
希望图像基本澄清它;我想要一个将多个元素组合在一起的表。
这是可能的,还是我必须通过为每个项目分配辅助非自动递增ID并在PHP中手动将平台分组在一起来实现?
答案 0 :(得分:2)
看起来你有一对多的关系。一般来说,这意味着
general
中的一行可以与platforms
中的零行,一行或多行相关联。
platforms
中的一行与general
中的一行完全相关。
要实现此设计,请将id
表中的general
值存储为platforms
表中的外键。
id
general_id -- foreign key references id in general table
name
url
两个表中的行由于共同的值而相关。
id general_id name url
--- ---------- --------- --------------------------
77 1 Platform1 http://item1.com/platform1
78 1 Platform2 http://item1.com/platform2
79 1 Platform3 http://item1.com/platform3
要使数据库强制引用完整性,您需要使用支持该引用的存储引擎(例如InnoDB),并且可以声明约束
ALTER TABLE `platforms` ADD
`general_id` INT NOT NULL COMMENT 'fk ref general.id' AFTER `id`;
(general_id
列的数据类型必须与id
表中general
列的数据类型完全匹配。)
在强制执行约束之前,新general_id
列中的值必须与引用列中的值匹配。
定义约束:
ALTER TABLE `platforms`
ADD CONSTRAINT FK_platforms_general
FOREIGN KEY (`general_id`) REFERENCES `general`(`id`)