【发布时间】:2017-01-30 12:39:38
【问题描述】:
我有一个案例,一个实体(职业)可能与其他实体有关系,也可能没有关系。
我可能有一个用户的职业是家政,而另一个用户的职业是烹饪,但我们必须指定他在哪些国际厨房做饭,所以我们有 X 是西班牙和亚洲厨房的厨师,Y是在管家。
与其他实体的条件关系取决于专业的业务类型。
我有以下表格:
-- 用户:ID,姓名,...
-- 职业:Id、职称、linked_entity_name
-- User_Profession: user_id, professional_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
【问题讨论】:
-
User & Profession之间的关系基数是多少?如果1 to many,那么我认为最好的做法是像您一样保留一个单独的表格。 -
是的,一个用户可以拥有多个职业@1000111
-
这是什么意思:如果该专业未与实体关联,则 User_Profession 表中的实体 id 将为零。
-
^ 这意味着我希望它没有相交行
-
@Drew 在用户做家务的情况下,他在表 user_profession 中的行将列 entity_id 值为零
标签: mysql database performance database-design relational-database