【问题标题】:Database normalisation and sql confusion数据库规范化和sql混淆
【发布时间】:2011-09-28 15:20:19
【问题描述】:

不确定这是否是我的数据库的最佳结构,但这是我目前所拥有的(欢迎更改建议)。我基本上想创建每个页面都有一组用户定义的字段的页面。所以我有四个表:pages、page_fields、page_data 和 data_fields。

页面:

id   name
 1   home

page_fields:

page_id field_id
   1       1
   1       2
   1       3

page_data:

 page_id  field_id  content
    1        1      'This is the Title'
    1        3      'Some description here'

数据字段:

id  field_name   field_type
1     title         text
2    subtitle       text
3   description    textarea

首先这是一个好的数据库结构吗? 其次,如果我们知道页面 id,如何获取 page_field 表定义的必填字段、该字段的数据(如果有的话)以及字段名称和字段类型?

我想这里会有几个连接,但我无法解决它们。

任何帮助表示赞赏。

【问题讨论】:

    标签: mysql join normalization


    【解决方案1】:
    1. 假设一页上的一个字段可以有单个值,您可以轻松消除page_fields 表。分配给页面的字段列表将存储在page_data中,如果还没有内容,则NULL值将在content列中。

    2. 类似SELECT * FROM page_fields INNER JOIN page_data ON (page_fields.page_id = page_data.page_id) INNER JOIN data_fields ON (page_data.field_id = data_fields.id);

    3. 另外阅读实体属性值模型,可能会产生一些新想法,并且通常对理解事物有用:http://en.wikipedia.org/wiki/Entity-attribute-value_model

    【讨论】:

    • 是的,我明白你的意思,如果我只在 page_data 中使用空值,page_fields 将是多余的。所以我的 sql 将是:SELECT * FROM page_data INNER JOIN data_fields ON (page_data.id = data_fields.id) WHERE page_data.id = '1' - 有效!谢谢
    猜你喜欢
    • 2016-06-09
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    相关资源
    最近更新 更多