Mysql 如何在sql表中描述对象?

Mysql 如何在sql表中描述对象?,mysql,sql,database,Mysql,Sql,Database,我需要在sql表中描述我的对象。每个对象都有其ID和大约30个属性(属性数,每个属性还有3个子属性。它可以是数百个这样的对象,每个对象的状态(属性数,属性值)每10分钟更新一次 因此,我有一个结构: _对象 __uu属性1 _子属性1 _子属性2 _子属性3 __uu财产2 _子属性1 _子属性2 _子属性3… __uu财产n _子属性1 _子属性2 _子属性3 哪条路更好 1.有N+1列的四个表,其中N是属性的最大数量。 --具有属性的表 | object_id | property_1 |

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

因此,我有一个结构:

_对象
__uu属性1
_子属性1
_子属性2
_子属性3
__uu财产2
_子属性1
_子属性2
_子属性3

__uu财产n
_子属性1
_子属性2
_子属性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.一张表(但多行)


或者可能是其他方面?

您应该尝试将信息标准化

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

在第二范式中,值仅依赖于主键

在第三范式中,不存在由另一个值传递确定的值。换句话说,如果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,以便:

  • 适应不断变化的属性和子属性的数量,而不在宽表中留下大量空值
  • 根据1NF避免值重复
我将使用3个表:

object:
-------
object_id pk| ... associated unique object values

property:
---------
property_id pk | ... associated unique property values

object_property
---------------
object_property_id pk | object_id fk | property_id fk | parent_property_id fk

这将允许您拥有所需的尽可能多的属性/子属性。

规范化它,这是您最好的选择。1NF表示值不重复/1每列值;2NF表示主键是其他字段所基于的字段,3NF表示没有传递关系。您是在说NF?0F吗当然我考虑过,但如果我知道如何在我的情况下规范化它,我不会寻求帮助。是的,规范化(标准形式)
object:
-------
object_id pk| ... associated unique object values

property:
---------
property_id pk | ... associated unique property values

object_property
---------------
object_property_id pk | object_id fk | property_id fk | parent_property_id fk