gpt4 book ai didi

mysql - 如何在sql表中描述一个对象?

转载 作者:搜寻专家 更新时间:2023-10-30 20:09:21 24 4
gpt4 key购买 nike

我需要在 sql 表中描述我的对象。每个对象都有它的ID和大约30个属性(属性的数量,每个属性还有3个额外的子属性。它可以是数百个这样的对象,并且每个对象的状态(属性的数量,属性值)每10分钟更新一次.

所以,我有一个结构:

_ Object
_ _ property 1
_ _ _ sub-property 1
_ _ _ sub-property 2
_ _ _ sub-property 3
_ _ property 2
_ _ _ sub-property 1
_ _ _ sub-property 2
_ _ _ sub-property 3
...
_ _ property n
_ _ _ sub-property 1
_ _ _ sub-property 2
_ _ _ sub-property 3

哪种方式更好?

<强>1。具有 N+1 列的四个表,其中 N 是最大值。属性数量。

-- 具有属性的表

| object_id | property_1 | property_2 | ... | prN |

-- 具有子属性 1 的表

| object_id | sub1_1 | sub1_2 | ... | sub1_N |

-- 具有子属性 2 的表

| object_id | sub2_1 | sub2_2 | ... | sub2_N |

-- 具有子属性 3 的表

| object_id | sub3_1 | sub3_2 | ... | sub3_N |

许多单元格可以为空,这不是好的形式。

<强>2。一张表(但更多行)

| object_id | property_number | sub1 | sub2 | sub3 |

或者可能还有其他事情?

最佳答案

您应该尝试规范化信息。

在第一范式中,值不重复,每个字段包含一个值。

在第二范式中,值仅取决于主键。

在第三范式中,不存在由另一个值传递确定的值。换句话说,如果 B 依赖 A,C 依赖 B,则 C 传递依赖 A。

顺便说一句,你的问题的答案是使用第一个。

在您的情况下,每个主要属性都应该有一个单独的表格,旁边是每个单独的项目(在另一个表格中)。

将id作为主键存储,并设置外部引用约束。

CREATE TABLE object (
oid INT(5) NOT NULL,
name VARCHAR(60) NOT NULL UNIQUE,
pid1 INT(5) NOT NULL,

PRIMARY KEY(oid)
);

CREATE TABLE property_table_one (
pid INT(5) NOT NULL,
name VARCHAR(60) NOT NULL,
oid INT(5) NOT NULL,
property_one INT NOT NULL,

PRIMARY KEY(pid),
FOREIGN KEY(oid) REFERENCES object(oid)
);

^ - 粗略地了解如何去做,但我现在意识到这比乍一看要难;以上内容可能适合也可能不适合您的目的并被规范化。至少是 2NF

关于mysql - 如何在sql表中描述一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28227688/

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