当前位置: 首页 > news >正文

中国建设银行投标再什么网站上网店营业执照

中国建设银行投标再什么网站上,网店营业执照,手机建网站花钱吗,可以做自媒体的网站文章目录 当研究一个问题慢慢深入时,一个看起来简单的问题也暗藏玄机。在 SQL 中,主键成为外键这是一个很平常的问题,乍一看没啥值得注意的。但如果这个主键是一种复合主键,而另一个表又引用这个键作为它的复合主键,问…

文章目录

  当研究一个问题慢慢深入时,一个看起来简单的问题也暗藏玄机。在 SQL 中,主键成为外键这是一个很平常的问题,乍一看没啥值得注意的。但如果这个主键是一种复合主键,而另一个表又引用这个键作为它的复合主键,问题就会变得复杂。

  这里为了便于说明,简单抽象出这样一个情景。数据库中有很多用户(User),每个用户有他的好友分组(Folder),每个分组下面有该用户的好友(Contact)。下面看看应该如何建表。

  • User 表建表示例代码如下:

    CREATE TABLE User (id VARCHAR(64) NOT NULL,name VARCHAR(64) NOT NULL,# ...为了简化说明,此表省略其它字段...PRIMARY KEY (id)
    );
  • Folder 表建表示例代码如下:

    CREATE TABLE Folder (id VARCHAR(64) NOT NULL,userId VARCHAR(64) NOT NULL,name VARCHAR(64) NOT NULL,# ...为了简化说明,此表省略其它字段...PRIMARY KEY (userId, id),# 因为上面的是复合主键,所以自动创建的是联合索引,而其它表的外键引用需要的是单个索引INDEX idIndex (id),FOREIGN KEY (userId) REFERENCES User (id)
    );
  • Contact 表建表示例代码如下:

    CREATE TABLE Contact (id VARCHAR(64) NOT NULL,# 表示此联系人属于谁的好友userId VARCHAR(64) NOT NULL,# 表示此联系人对应 User 中的 idlinkedUserId VARCHAR(64) NOT NULL,folderId VARCHAR(64) NOT NULL,# ...为了简化说明,此表省略其它字段...PRIMARY KEY (userId, id),# 因为上面的是复合主键,所以自动创建的是联合索引,而其它表的外键引用需要的是单个索引INDEX idIndex (id),# 同一个用户,不能拥有两个相同 ID 的 ContactUNIQUE (userId, linkedUserId),# 当复合主键成为外键时,必须整个复合主键一起作为外键,不能只引用复合主键其中的某个属性FOREIGN KEY (userId) REFERENCES Folder (userId),FOREIGN KEY (folderId) REFERENCES Folder (id),FOREIGN KEY (linkedUserId) REFERENCES User (id)
    );
    
  • 建表示意图如下:

    在这里插入图片描述

    在这里插入图片描述

  笔者已经将正确的建表在上述给出了,但问题其实不简单。注意看,表 Contact 引用了两个表的外键:表 User 和 表 Folder。而很奇妙的是,表 User、Folder 和 Contact 都有一个形同“userId”的字段,而且,它们的这个字段的意义是相同的。那么,表 Contact 中的 userId 究竟是引用表 User 中的 id 呢?还是引用表 Folder 中的 userId 呢?还是随便选一个都可以呢?

  答案是必须引用表 Folder 中的 userId,而不能引用表 User 中的 id。原因是,当复合主键成为外键时,必须整个复合主键一起作为外键,不能只引用复合主键其中的某个属性

  注意看,表 Contact 的属性 folderId 已经引用了表 Folder 的属性 id 了,但表 Folder 的主键是 (id,userId)。在这个情形下,表 Contact 必须也同时引用表 Folder 关于这个复合主键的其它属性。而正好表 Contact 有一个属性 userId,所以它必须引用表 Folder 中的 userId。

  可是,表 Contact 不是也和表 User 有引用啊,为什么没有受到表 User 的约束呢?因为 User 的主键不是复合主键,而且表 Contact 已经通过属性 linkedUserId 引用了表 User 的主键 id,因此不需要强制引用 User 的其它属性。

  当然,这只是 SQL 上的逻辑,而 SQL 只是一套标准,各个数据库的服务提供商对 SQL 的支持和实现因人而异。在 MySQL 中,如果建表时错误地将上述表 Contact 中的 userId 引用了表 User 中的 id,MySQL 并不会抛出错误,因为 MySQL 关于这方面不太严谨。但如果使用的是 SQLite,SQLite 将会在建表时就抛出错误。但不管各厂商的支持如何,将应该保证数据库建表的逻辑是正确的。

http://www.yayakq.cn/news/626614/

相关文章:

  • 建设网站的项目策划书长长沙网站制作
  • 海兴县做网站谷歌seo站内优化
  • 做电影网站选择什么配置的服务器软件设计专业介绍
  • 青岛做网站公司有哪些百度收录的网页数量
  • 博罗做网站技术网站已经备案更换主机
  • 咸阳市城乡建设规划局网站吉林沈阳网站建设
  • 平阴网站建设linux wordpress 主题下载
  • 中国沙漠建设 志愿者 兵团官方网站举例说明网络营销的概念
  • 人武部正规化建设经验seo兼职在家怎么做
  • 校园微网站建设方案ppt模板海宁市住房与城乡规划建设局网站
  • 国家和城乡建设部网站wordpress给幻灯片添加图片
  • 做个免费的网站属于教育主管部门建设的专题资源网站是
  • 产品做网站不花钱WordPress立体边框
  • 青岛制作网站软件公司网站建设计入明细科目
  • 注册网站需要实名认证吗山西响应式网站建设公司
  • 建设商业网站的功能定位crm管理系统哪家好
  • 网站管理怎么做安徽制作网站专业公司
  • 网站设计说明书范文asp网站做搜索
  • 网页制作与网站建设实战大全光盘网络营销推广方案步骤
  • 南昌网站seo 优帮云黑帽seo工具
  • 永州网站建设效果网页设计软件列表html代码
  • 文案类的网站最新网站建设的模板
  • 华为网站建设wordpress 首页添加登陆
  • 沧州网络公司科技成都seo经理
  • 电子商务网站建设与维护公司形象墙
  • 勐海县城乡建设局门户网站网站说服力营销型网站策划
  • 新乡商城网站建设哪家专业单位网站建设有机房吗
  • 云南昆明网站建设快速优化珠海品牌网站制作服务
  • 假网站怎么做专业论坛网站有哪些
  • 网站内容管理系统建设北京市中关村有哪家可以做网站维护