【问题标题】:How to create a view with normalized properties in mysql?如何在 mysql 中创建具有规范化属性的视图?
【发布时间】:2011-07-25 12:22:14
【问题描述】:

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

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,'身高','165cm')

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

提前谢谢你,

【问题讨论】:

  • 有什么特别的原因为什么您不会简单地将属性合并到person 表中?这让我想起了太多元数据库。一方面,我希望每个人都有名字和性别。

标签: mysql database database-design


【解决方案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;

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
  • 1970-01-01
  • 2021-05-23
  • 2017-05-15
  • 2017-08-19
  • 2012-10-08
相关资源
最近更新 更多