我有一个对象,说它是一个小工具。我的窗口小部件有许多属性,可能是我需要跟踪的众多值之一。将此Widget存储在数据库中的正确方法是什么?
我想到了三种方式:
创建一个以Widget的序列号作为主键的表。然后,其他属性都存储在它们自己的表中,在这些表中它们具有自动生成的主键,并且文本用于描述它们。像这样:
serial attr1fk attr2fk ... attrNfk
----------------------------------------
serial1 1 19 7
serial2 16 12 3
...
serialN 45 9 7
然后外键指定Widget的属性值:
attr1id color
---------------
1 red
2 blue
...
等等Widget的其他属性。
创建一个只保存Widget序列号的表,然后保存属性值的表使用serial作为外键来描述Widget。
serial
------
serial1
serial2
...
serialN
使用serial作为外键的表:
serialfk color
----------------
serial1 red
serial2 orange
...
然后最后一种方法使用三个表:一个用于保存序列号,一个用于保存序列号和属性值之间的关联,两个用作外键。这个似乎太多了,因为获取Widget属性的文本值需要两个连接。
这些是最好的架构设计,数据库设计的哪些原则使其成为最佳?还有更好的方法吗?
谢谢