【问题标题】:how to make a normalization[code not the theory] [closed]如何进行标准化[代码不是理论] [关闭]
【发布时间】:2014-09-01 11:43:56
【问题描述】:

我在哪里可以找到一个好的规范化教程?我已经用谷歌搜索了它,但我只找到了我理解的概念,我需要知道的是如何从现有表中获取重复数据,到规范化表而不输入它...示例:

+-----------------------+
| ID | TEXT | TAGS      |
+-----------------------+
| 1  | text1| repeating |
| 2  | text2| repeating |
+-----------------------+

如何规范化将使用 3 个表,一个用于 tags_id 和 tags,另一个将 tags_id 与上表中的 ID 相关联...但是代码如何知道有一个名为 repeating 的标签并且不要重复它另一张桌子?我想获得一个非规范化表并将其规范化.-。谁能给我一个规范化的代码示例?

【问题讨论】:

  • 你知道唯一索引吗?
  • 你看不懂的代码是什么?
  • 索引...不是真的.-。砍伐有点傻
  • 我建议你参加这个课程,这可能有助于澄清问题:) coursera.org/course/db
  • 谢谢,但它说“没有可用的会话”。

标签: sql normalization


【解决方案1】:

尽管这个问题太宽泛了,但这里是简短的手册:

第一个你有去规范化的表:

original_table id|文本|标签 1|文本1|标签1,标签2... 2|文本2|标签2,标签3...

第二个你需要创建新的、标准化的结构:

文本 text_id|文本 标签 tag_id(自动增量)|标签 文本标签 text_id|tag_id

3rd 现在需要将旧表中的数据转换成新表(伪代码):

$all_rows = select * from original_table

foreach $row in $all_rows
{
    $text_id = $row.id;
    $text = $row.text;
    $tags_array = split($row.tags, ',');

    insert into texts(text_id, test) values($text_id, '$text');

    foreach $tag in $tags_array
    {
        $tag_id = select tag_id from tags where tag='$tag';
        if $tag_id found
        {
            insert into text_tags(text_id, tag_id) values($text_id, $tag_id);
        }
        else
        {
            insert into tags(tag) values('$tag');
            $tag_id = select last_inserted_id;

            insert into text_tags(text_id, tag_id) values($text_id, $tag_id);
        }
    }
}

第四次你完成了

【讨论】:

  • 谢谢 :) 你的 phpish 代码帮了大忙
猜你喜欢
  • 1970-01-01
  • 2022-11-23
  • 2010-09-19
  • 2011-01-19
  • 2020-09-27
  • 1970-01-01
  • 2011-06-09
相关资源
最近更新 更多