美好的一天,我需要创建一个应该支持以下层次结构的组织结构:
Country - Organization - User
Country - Organization - Suborganization - User
我想过有三张桌子。表国家(列ID是三个字母的ISO 3166-1 alpha-3):
CREATE TABLE `country` (
`id` CHAR(3) NOT NULL,
`country` VARCHAR(40) NOT NULL,
PRIMARY KEY (`id`)
);
表组织:
CREATE TABLE `organization` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`country_id` CHAR(3) NOT NULL,
`parent_id` INT(11) NULL DEFAULT NULL,
`name` VARCHAR(40) NOT NULL,
PRIMARY KEY (`id`),
INDEX `idx_organization_1` (`parent_id` ASC),
CONSTRAINT `fk_customer_country_1`
FOREIGN KEY (`country_id`)
REFERENCES `country` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_organization_organization_1`
FOREIGN KEY (`parent_id`)
REFERENCES `organization` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE
);
表用户:
CREATE TABLE `user` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`organization_id` INT(11) NULL DEFAULT NULL,
`username` VARCHAR(45) NOT NULL,
`password` CHAR(32) NOT NULL,
PRIMARY KEY (`id`),
INDEX `idx_user_organization_1` (`organization_id` ASC),
CONSTRAINT `fk_user_organization_1`
FOREIGN KEY (`organization_id`)
REFERENCES `organization` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE);
表国家/地区存在是为了防止为组织分配不受支持的国家/地区代码。我不想使用MySql的枚举。虽然我现在正在使用MySql,但我需要我的架构独立于特定的数据库。
这是一个好的设计还是有更好的设计?我怀疑是因为以下问题。我可以“某种程度上”做到这一点,但我想知道最佳实践方法。
我很欣赏任何想法。非常感谢。 Vojtech
答案 0 :(得分:0)