如何在mysql中创建具有规范化属性的视图?

时间:2011-07-25 12:22:14

标签: mysql database database-design

我在数据库中有两个表,一个是个人表,另一个是他们的属性。

CREATE  TABLE IF NOT EXISTS `person` (
  `ID` INT NOT NULL AUTO_INCREMENT ,
  PRIMARY KEY (`ID`) )
ENGINE = InnoDB

CREATE  TABLE IF NOT EXISTS `property` (
  `ID` INT NOT NULL AUTO_INCREMENT ,
  `person_ID` INT NULL ,
  `property` VARCHAR(45) NULL ,
  `value` VARCHAR(45) NULL ,
  PRIMARY KEY (`ID`) )
ENGINE = InnoDB

在属性表中,我会有像

这样的插入内容

(1, '姓名', '玛丽') (1, '性别', '女性')

(2, '名称', '约翰') (,2, '性别', '男') (2, '身高', '165厘米')

我将如何制作可生成这些列的视图语句: person_ID,名称,性别,身高,(以及可能出现的任何其他属性)

提前谢谢你,

1 个答案:

答案 0 :(得分:1)

试试这个。

SELECT
  p.ID, prop.name, prop.gender, prop.height
FROM
  person p
  JOIN
    (
    SELECT
      person_ID,
      MAX(IF(`property` = 'name', `value`, NULL)) AS name,
      MAX(IF(`property` = 'gender', `value`, NULL)) AS gender,
      MAX(IF(`property` = 'height', `value`, NULL)) AS height
    FROM
      property
    GROUP BY
      person_ID) prop
    ON p.ID = prop.person_ID;

请注意,在此解决方案中,所有字段和值都是硬编码的。