实体与其他实体有随机关系

时间:2016-09-22 04:51:27

标签: mysql database performance database-design relational-database

我有一个案例,实体(专业)可能会或可能不会与其他人有关系。

我可能有一个管家作为专业的用户,而另一个用户做饭是专业,但我们必须指定他做的国际厨房,所以我们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

1 个答案:

答案 0 :(得分:0)

几分钟前,我回答了一个问题{我在这里提供answer

简而言之,根据需要创建一个或多个表来包含每个职业的详细信息。创建一种交集表,将每个用户与他们的职业联系起来。当然,专业数据将包含在不同专业的不同表格中,因此交叉表的专业方面不能直接参考专业数据表。

所以......将FK放在行业表中,使用专业指示符引用回交点表的专业一侧以维护数据完整性。上面链接中的详细信息。