gpt4 book ai didi

mysql - 如何设计数据库来处理与单个主键相关的列中的多个值?

转载 作者:行者123 更新时间:2023-11-29 08:02:26 24 4
gpt4 key购买 nike

假设有表 Oil_man :

Oil_man_ID  Component_A    Component_B        Raw_Data 645463         87            13         76,87,837,87272 844887         76            24         87,3938,39383,837383,3838,9,383,8378,14263,27263 764767         60            40         8487,8478

现在,如果我想打印特定 ID 的 Raw_data 中的所有值,我必须进行一些肮脏的修改,当 Raw_Data 中的值数量开始快速增加时,这会非常令人困惑。 Raw_data 中的值是随机的,除了长度方向外没有任何限制。

在这种情况下我应该如何正确设计数据库? Raw_Data 中的值应该正确链接到 Oil_Man_Id 。谢谢您

最佳答案

对于重复属性,规范模式是一个单独的表,具有对父表的外键引用。例如:

parent_table
oil_man_id component_a component_b
---------- ----------- -----------
645463 87 13
844887 76 24

child_table
oil_man_id attribute
---------- ---------
645463 76
645463 87
645463 837
645463 87272
844887 87
844887 3938

为了避免“重复”,请在 FK 和属性列的组合上创建唯一索引。它可以作为表的主键。 (是否允许重复由您决定;在任何一种情况下都可以添加代理主键。)

如果属性的顺序很重要,您还可以添加其他属性,例如序数位置(序列)。

如果我们希望能够将 Raw_Data 中的值作为一个集合来处理,那么这是我们应该遵循的正常模式。重复属性表的示例定义,对属性值具有 UNIQUE 约束:

CREATE TABLE child_table
( oil_man_id INT UNSIGNED COMMENT 'PK, FK ref parent_table.id'
, attribute INT UNSIGNED COMMENT 'PK'
, ordinal_position INT UNSIGNED COMMENT '1,2,3,...'
, PRIMARY KEY (oil_man_id, attribute)
, CONSTRAINT FK_child_table_parent_table FOREIGN KEY (oil_man_id)
REFERENCES parent_table (oil_man_id)
ON DELETE CASCADE ON UPDATE CASCADE
) Engine=InnoDB;
<小时/>

如果MySQL永远不需要将Raw_Data的各个组件作为一个集合来处理;无需查询 Raw_Data 中是否存在单个值,也无需添加或删除单个值,或将单个值作为单独的行返回...如果 MySQL 将将此视为一个长的匿名字符串,您可以使用 VARCHAR 列将其存储为字符串。或者,如果它是一个非常长的字符串(并且行大小将超过支持的最大行大小),您可以使用 TEXT 数据类型。

关于mysql - 如何设计数据库来处理与单个主键相关的列中的多个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23415301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com