数据库建表时一个表最多可以有几个主键,几个外键

记得有一次,公司成立之初做一个数据库项目,然后我们团队要开发一个在线图书馆。
我们需要每一行只能有一个,但每一行都会包含多个产品,因此仅靠行号并不能保证唯一性。
因此我们决定使用行号和日期行的组合作为主键,这样我们就可以使每一行都是唯一的。

当时我还在想,如果只相信数字的话,万一有一天系统出了问题,就会出现数字的重复顺序,那就烦人了。
但通过将订单号和日期结合起来,即使系统崩溃并且订单号被重置,时间仍然可以是唯一的。
这就像给每个订单一个独特的标签。

接下来我们考虑外键的使用。
例如,如果每个订单都与一个用户相关联,我们将用户ID设置为外键,以便可以轻松跟踪每个订单的用户信息。
但是,我们也注意到,也可以实现多个外键,因为每次插入或更新数据时,数据库都需要检查外键的引用完整性。

等一下,我突然想到,如果有一天用户列表中的用户被删除了,但是这个用户的顺序仍然是表的顺序怎么办?是滑动删除还是阻塞删除?我们当时并没有深入讨论这个问题。
现在想想,还是要根据需求来做决定。
毕竟每个业务场景都有其独特性,同样的数据库设计体系,无法生成。

u9单据关联的四种方法

U9 文档链接只有四种类型。
听起来很复杂,但实际上就是这样。

1 .外键关联 这是最常见的。
例如,如果将客户编号放入订单表中,则它指向客户信息表中的主键。
确保找到合适的人来下订单。
说白了,就是用一个表中的一个字段来“检查”另一个表中的记录。
操作简单有效,但外键约束必须谨慎设置,否则数据很容易混乱。

2 公共主键关联 当单个字段不够用时,请使用复合主键。
例如,在销售时,仅产品数量是不够的。
您还必须添加版本号。
两个字段的组合可以唯一地标识一条记录。
这样,如果产品版本发生变化,数据就不会混淆。
但是,全局主键查找可能会比较慢,并且如果字段太多,查询起来会很困难。

3 链接业务逻辑流程 这取决于业务规则。
例如,对于购买退货,发件人必须首先创建退货单,然后收件人将为购买创建退货单。
收件人不能亲自前来。
这确保了过程准确且数据可追溯。
但这取决于系统能否很好地配置该过程。
如果你跑错了,你就会遇到麻烦。

4 系统集成相关审批流程 现在企业都用OA,比如飞书。
U9 文档与OA审批相关。
OA审批后自动创建U9 文档,或者创建U9 文档并同步到OA审批。
这样,数据就不会被卡住。
但系统接口必须兼容,数据传输必须安全。

说白了,数据表设计、业务流程、系统是相互关联的。
这三种方法使文档链接变得显而易见。
企业可以根据自身情况选择使用。

怎么与联合主键建立外键关系

嗯...数据库设计...联合主键...真的很复杂。

看...当我在上海的时候...2 02 2 年...做一个项目...我用这个...
首先...创建一个名为Products的表...来存储产品信息...产品有ID...和类别ID...这两个...我能够唯一地确定一个产品...不能依赖于单个ID...
sql 创建表产品( 产品 ID INT; 类型_id INT; 名称 VARCHAR(1 00); 价格 DECIMAL (1 0, 2 ); 主键(产品 ID、类别 ID); );
这里product_id和category_id是联合主键...它们必须一起使用,不能单独使用。

然后...创建另一个表...orders...记录订单...订单需要与具体产品关联...哪种产品...哪种类型...购买了多少...
sql 创建表订单 ( order_id INT 自动递增; 订单日期日期; 金额 INT; -
这里...关联产品表的联合主键 产品 ID INT; 类型_id INT; 外键(product_id,category_id)引用产品(product_id,category_id) );
外键...和product_id、category_id一样...指向产品表的主键...
当时...写这个的时候...我有点困惑...外键怎么写...查了好久...我可以这样写...
这个...来确定...订单中的产品...是一样的...产品...必须在表中...类别...
我有点极端。
也许...我想我必须写对...否则数据会混乱...
并且...像供应商...也许还有另一个表来存储供应商信息...
sql 创建表供应商( 供应商 ID INT; 供应商名称 VARCHAR(1 00); 联系人姓名 VARCHAR(1 00); 地址 VARCHAR(2 5 5 ); 电话 VARCHAR(2 0); 主键(供应商 ID) );
这……可能和之前的订单表有关……怎么办?
例如...在Orders 表中...您可以添加supplier_id 字段...
sql ALTER TABLE 订单添加列 seller_id INT;
ALTER TABLE 订单添加外键 (supplier_id) 引用供应商(supplier_id);
这样...一个订单...与一个供应商相关...
你看...几个...联主键...外键...相关...相关...
2 02 2 ...那个项目...数据量不小...每天几万个订单...与产品和供应商相关...如果关联错了...检查数据的关键关系...就会出问题...关键...真的很重要...设计时...我必须想清楚...如何连接...我做不到随意...
我比较矮...就是这样...

怎么与联合主键建立外键关系

通过组合主键创建外键没有问题。
但是,请注意以下几点:
1 通过组合主键创建外键的语法与简单主键相同。
2 . 确保引用的表和列存在。
3 、共享主键不能包含不存在的列。

示例:
sql mysql> 创建表 tb_key1 (id INT, item_id INT, memo VARCHAR(2 0), PRIMARY KEY (id, item_id)); 查询正常,0 行受影响(0.09 秒)
mysql> 创建表 tb_key2 (new_id INT, item_id INT, name VARCHAR(5 0), FOREIGN KEY (new_id, item_id) REFERENCES tb_key1 (id, item_id)); 查询正常,0 行受影响(0.08 秒)
mysql> CREATE TABLE tb_key3 (my_id INT, comment VARCHAR(1 00), FOREIGN KEY (my_id) REFERENCES tb_key1 (id)); 错误 1 2 1 5 (HY000):无法添加外键约束。

错误原因:tb_key3 的外键my_id只引用了tb_key1 的ID,tb_key1 的主键是ID item_id。