我有两张桌子,widget和tier。一家公司可以属于任何一层(tier1、tier2、tier3),并且每一层都启用了一些小部件。因为ex - tier1启用了3个不同的小部件,第二层有3个自己的不同的小部件,tier1的3个小部件也总共有6个,tier3以同样的方式启用了总共9个(3+3+3)小部件。
Company表有一个tier_id作为外键。
我的widget和层表描述如下:
CREATE TABLE IF NOT EXISTS `mydb`.`widget` (
`id` INT NOT NULL,
`name` VARCHAR(100) NOT NULL,
`tier_id` INT NULL,
PRIMARY KEY (`id`),
INDEX `fk_widget_tier_idx` (`tier_id` ASC),
CONSTRAINT `fk_widget_tier`
FOREIGN KEY (`tier_id`)
REFERENCES `mydb`.`tier` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
CREATE TABLE IF NOT EXISTS `mydb`.`tier` (
`id` INT NOT NULL,
`name` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB现在假设一家公司是第3层,我如何设计数据库,当我为tier3获取小部件的值时,它将获取所有9个小部件?如果我做了一个公司与层的连接,然后与小部件表,我将只得到3个小部件,这是包括在第3层。如何获得其余的6个小部件(第1层和第2层)。
我正在使用java + hibernate来处理数据库。我是否需要在代码中手动获取,就像检查层的级别,然后创建此类小部件的列表并返回它一样?
我希望这个问题是明确的,而不是一个非常基本的问题(害怕投票)。
发布于 2014-09-13 18:01:22
如果我理解的很好,你有:
tear1 -> tear1_widgets
tear2 -> tear1_widgets + tear2_widgets
tear3 -> tear1_widgets + tear2_widgets + tear3_widgets
在您的情况下,我将遵循分层模型。我会将上面的层次结构保存在一个表中,以便知道每个实例(在你的例子中是“tear”),哪些实例继承了它的属性(在你的例子中是“widgets”)。因此,每当你有一个条目类型'tear3‘,你就知道它必须有9个小部件,以及你必须从哪里(tear1、tear2和tear3)获取它们。

在上面的示例中,您可以看到您知道可以从哪个表继承您的小部件,并且您只需编写查询来获取它们。
另外,通过特殊的设计,你可以拥有你想要的任何部件组合的实例(撕裂)。
*添加了镜像
https://stackoverflow.com/questions/25821918
复制相似问题