美文网首页
SQL反模式-乱穿马路

SQL反模式-乱穿马路

作者: 富贵山庄王动 | 来源:发表于2017-03-16 23:37 被阅读0次

    名字有点怪。
    其实就是交叉表的设计,或者叫中间表,联合表,多对多表,这个是最直观的。
    也就是多值属性的拆分。
    这里的反模式指的是将多对多的关系存放到一个字段中,用逗号分开。
    这样有很多坏处:

    • 索引显然是不能用了
    • 增加了查询的难度,这里的难度是说sql语句更难写了,只有及其少数的操作优化了,是哪个操作就显而易见了。
    • 列表的长度有限制,比如varchar的字段长度是有限的。

    例子

    一个产品可能有多个联系人。
    可以这样设计:

    CREATE TABLE Contacts (
      product_id BIGINT UNSIGNED NOT NULL,
      account_id BIGINT UNSIGNED NOT NULL ,
      PRIMARY KEY (product_id,account_id),
      FOREIGN KEY (product_id) REFERENCES Products(product_id),
      FOREIGN KEY (account_id) REFERENCES Accounts(account_id)
    );
    

    好处

    • 可以添加索引了
    • 可以添加额外的信息,比如一些操作时间等
    • 主要联系人和次要联系人等都可以实现

    相关文章

      网友评论

          本文标题:SQL反模式-乱穿马路

          本文链接:https://www.haomeiwen.com/subject/tgysnttx.html