【发布时间】:2011-10-15 13:34:38
【问题描述】:
我有四个实体:
- 人
- 居中
- 活动
- 地址
所以我的想法是:
- 一个人可能有一个关联的地址。
- 一个中心可能有一个关联的地址。
- 一个活动可能有一个关联的地址。
这个 mysql 设计对于 joomla 组件是否正确?
CREATE TABLE `#__person` (
`id` int(10) NOT NULL AUTO_INCREMENT,
other fields...
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `#__center` (
`id` int(10) NOT NULL AUTO_INCREMENT,
other fields...
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `#__activity` (
`id` int(10) NOT NULL AUTO_INCREMENT,
other fields...
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `#__address` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`line1` varchar(30),
`line2` varchar(30),
`locality` varchar(10),
`region` varchar(10),
`country` varchar(10),
`postcode` varchar(10),
`person_id` int(10),
`center_id` int(10),
`activity_id` int(10),
PRIMARY KEY (id),
FOREIGN KEY `person_id` REFERENCES `#__person` (id) ON DELETE CASCADE,
FOREIGN KEY `center_id` REFERENCES `#__center` (id) ON DELETE CASCADE,
FOREIGN KEY `activity_id` REFERENCES `#__activity` (id) ON DELETE CASCADE,
other fields...
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
也就是说:
- 如果我删除一个人,他/她对应的地址会自动被删除吗?
- 如果我删除一个地址,他们的引用会怎样? (希望没有)
- 如果同一个地址是一个中心和一个活动的地址,会发生什么?
- 外键是否在正确的表中,或者我应该在 person、center 和 activity 中添加 address_id 字段吗?
我对我的设计有点困惑。
感谢您的建议。
【问题讨论】:
标签: mysql joomla foreign-keys innodb