我有一个案例,实体(专业)可能会或可能不会与其他人有关系。
我可能有一个管家作为专业的用户,而另一个用户做饭是专业,但我们必须指定他做的国际厨房,所以我们X是西班牙和亚洲厨房的厨师,Y在家务。
与其他实体的条件关系取决于专业的业务类型。
我有以下表格:
- 用户:Id,Name,...
- 职业:Id,title,linked_entity_name
- User_Profession:user_id,profession_id,entity_id
如果专业未链接到实体,则表User_Profession中的实体ID将为零。
这种方法在网站的表格规范化,性能和数据搜索方面是否有效?
实体可能有也可能没有关系的最佳做法是什么?
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fullName` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `profession` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL,
`linked_entity_name` varchar(100) NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `user_profession` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL ,
`profession_id` int(11) NOT NULL ,
`entity_id` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `kitchen` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`kitchen_name` varchar(100) NOT NULL,
`kitchen_origin` varchar(100) NOT NULL,
`kitchen_desc` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SQLFiddle:http://sqlfiddle.com/#!9/ece75
答案 0 :(得分:0)
几分钟前,我回答了一个问题{我在这里提供answer。
简而言之,根据需要创建一个或多个表来包含每个职业的详细信息。创建一种交集表,将每个用户与他们的职业联系起来。当然,专业数据将包含在不同专业的不同表格中,因此交叉表的专业方面不能直接参考专业数据表。
所以......将FK放在行业表中,使用专业指示符引用回交点表的专业一侧以维护数据完整性。上面链接中的详细信息。